<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://gmpg.org/xfn/11">
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

	<title>实例分析Java Class的文件结构 | 酷 壳 - CoolShell.cn</title>
	<link rel="alternate" type="application/rss+xml" title="RSS 2.0 - 所有文章" href="http://coolshell.cn/feed" />
	<link rel="alternate" type="application/rss+xml" title="RSS 2.0 - 所有评论" href="http://coolshell.cn/comments/feed" />
	<link rel="pingback" href="http://coolshell.cn/xmlrpc.php" />

	<!-- style START -->
	<!-- default style -->
	<style type="text/css" media="screen">@import url( http://coolshell.cn/wp-content/themes/inove/style.css );</style>
	<link rel='stylesheet' id='open-sans-css'  href='http://coolshell.cn//wp-includes/css/google-font.css?ver=3.9.1' type='text/css' media='all' />
	<!-- for translations -->
			<link rel="stylesheet" href="http://coolshell.cn//wp-content/themes/inove/chinese.css" type="text/css" media="screen" />
		<!--[if IE]>
		<link rel="stylesheet" href="http://coolshell.cn//wp-content/themes/inove/ie.css" type="text/css" media="screen" />
	<![endif]-->
	<!-- style END -->

	<!-- script START -->
	<script type="text/javascript" src="http://coolshell.cn//wp-content/themes/inove/js/base.js"></script>
	<script type="text/javascript" src="http://coolshell.cn//wp-content/themes/inove/js/menu.js"></script>
	<!-- script END -->

	<link rel="alternate" type="application/rss+xml" title="酷 壳 - CoolShell.cn &raquo; 实例分析Java Class的文件结构评论Feed" href="http://coolshell.cn/articles/9229.html/feed" />
<script>var killIE6ImgUrl = "http://coolshell.cn//wp-content/plugins/lets-kill-ie6/img";</script><link rel='stylesheet' id='wp-postratings-css'  href='http://coolshell.cn//wp-content/plugins/wp-postratings/postratings-css.css?ver=1.79' type='text/css' media='all' />
<link rel='stylesheet' id='wp-pagenavi-css'  href='http://coolshell.cn//wp-content/themes/inove/pagenavi-css.css?ver=2.70' type='text/css' media='all' />
<script type='text/javascript' src='http://coolshell.cn//wp-includes/js/jquery/jquery.js?ver=1.11.1'></script>
<script type='text/javascript' src='http://coolshell.cn//wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.1'></script>
<script type='text/javascript' src='http://coolshell.cn//wp-content/plugins/lets-kill-ie6/lets-kill-ie6.js?ver=4.0.1'></script>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://coolshell.cn/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://coolshell.cn//wp-includes/wlwmanifest.xml" /> 
<link rel='prev' title='并发框架Disruptor译文' href='http://coolshell.cn/articles/9169.html' />
<link rel='next' title='《Rework》摘录及感想' href='http://coolshell.cn/articles/9156.html' />
<meta name="generator" content="WordPress 4.0.1" />
<link rel='shortlink' href='http://coolshell.cn/?p=9229' />
	<link href="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Styles/SyntaxHighlighter.css" type="text/css" rel="stylesheet" />
	<script type="text/javascript">
	window._wp_rp_static_base_url = 'https://wprp.zemanta.com/static/';
	window._wp_rp_wp_ajax_url = "http://coolshell.cn/wp-admin/admin-ajax.php";
	window._wp_rp_plugin_version = '3.5.3';
	window._wp_rp_post_id = '9229';
	window._wp_rp_num_rel_posts = '8';
	window._wp_rp_thumbnails = false;
	window._wp_rp_post_title = '%E5%AE%9E%E4%BE%8B%E5%88%86%E6%9E%90Java+Class%E7%9A%84%E6%96%87%E4%BB%B6%E7%BB%93%E6%9E%84';
	window._wp_rp_post_tags = [];
	window._wp_rp_promoted_content = true;
</script>
<script type="text/javascript" src="https://wprp.zemanta.com/static/js/loader.js?version=3.5.3" async></script>
<style type="text/css">
.related_post_title {

}
ul.related_post {
}
ul.related_post li {
}
ul.related_post li a {
}
ul.related_post li img {
}</style>

<!-- All in One SEO Pack 2.2.3.1 by Michael Torbert of Semper Fi Web Design[326,385] -->
<meta name="keywords"  content="java,java语言" />

<link rel="canonical" href="http://coolshell.cn/articles/9229.html" />
<meta property="og:title" content="实例分析Java Class的文件结构 | 酷 壳 - CoolShell.cn" />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://coolshell.cn/articles/9229.html" />
<meta property="og:image" content="http://coolshell.cn//wp-content/plugins/all-in-one-seo-pack/images/default-user-image.png" />
<meta property="og:site_name" content="酷 壳 - CoolShell.cn" />
<meta property="og:description" content="【感谢网友 @Krq_Tiger 投稿】 今天把之前在Evernote中的笔记重新整理了一下，发上来供对java class 文件结构的有兴趣的同学参考一下。 学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号，说“一次编写，到处运行”，其实说到无关性，Java平台还有另外一个无关 性那就是语言无关性，要实现语言无关性，那么Java体系中的class的文件结构或者说是字节码就显得相当重要了，其实Java从刚开始的时候就有两套 规范，一个是Java语言规范，另外一个是Java虚拟机规范，Java语言规范只是规定了Java语言相关的约束以及规则，而虚拟机规范则才是真正从跨 平台的角度去设计的。今天我们就以一个实际的例子来看看，到底Java中一个Class文件对应的字节码应该是什么样子。 这篇文章将首先总体上阐述一下Class到底由哪些内容构成，然后再用一个实际的Java类入手去分析class的文件结构。 在继续之前，我们首先需要明确如下几点： 1）Class文件是有8个字节为基础的字节流构成的，这些字节流之间都严格按照规定的顺序排列，并且字节之间不存在任何空隙，对于超过8个字节的数据，将按 照Big-Endian的顺序存储的，也就是说高位字节存储在低的地址上面，而低位字节存储到高地址上面，其实这也是class文件要跨平台的关键，因为 PowerPC架构的处理采用Big-Endian的存储顺序，而x86系列的处理器则采用Little-Endian的存储顺序，因此为了Class文 件在各中处理器架构下保持统一的存储顺序，虚拟机规范必须对起进行统一。 2） Class文件结构采用类似C语言的结构体来存储数据的，主要有两类数据项，无符号数和表，无符号数用来表述数字，索引引用以及字符串等，比如 u1,u2,u4,u8分别代表1个字节，2个字节，4个字节，8个字节的无符号数，而表是有多个无符号数以及其它的表组成的复合结构。可能大家看到这里 对无符号数和表到底是上面也不是很清楚，不过不要紧，等下面实例的时候，我会再以实例来解释。 明确了上面的两点以后，我们接下来后来看看Class文件中按照严格的顺序排列的字节流都具体包含些什么数据：   （上图来自The Java Virtual Machine Specification Java SE 7 Edition)" />
<meta property="article:published_time" content="2013-03-05T23:28:51Z" />
<meta property="article:modified_time" content="2013-03-06T00:20:49Z" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:description" content="【感谢网友 @Krq_Tiger 投稿】 今天把之前在Evernote中的笔记重新整理了一下，发上来供对java class 文件结构的有兴趣的同学参考一下。 学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号，说“一次编写，到处运行”，其实说到无关性，Java平台还有另外一个无关 性那就是语言无关性，要实现语言无关性，那么Java体系中的class的文件结构或者说是字节码就显得相当重要了，其实Java从刚开始的时候就有两套 规范，一个是Java语言规范，另外一个是Java虚拟机规范，Java语言规范只是规定了Java语言相关的约束以及规则，而虚拟机规范则才是真正从跨 平台的角度去设计的。今天我们就以一个实际的例子来看看，到底Java中一个Class文件对应的字节码应该是什么样子。 这篇文章将首先总体上阐述一下Class到底由哪些内容构成，然后再用一个实际的Java类入手去分析class的文件结构。 在继续之前，我们首先需要明确如下几点： 1）Class文件是有8个字节为基础的字节流构成的，这些字节流之间都严格按照规定的顺序排列，并且字节之间不存在任何空隙，对于超过8个字节的数据，将按 照Big-Endian的顺序存储的，也就是说高位字节存储在低的地址上面，而低位字节存储到高地址上面，其实这也是class文件要跨平台的关键，因为 PowerPC架构的处理采用Big-Endian的存储顺序，而x86系列的处理器则采用Little-Endian的存储顺序，因此为了Class文 件在各中处理器架构下保持统一的存储顺序，虚拟机规范必须对起进行统一。 2） Class文件结构采用类似C语言的结构体来存储数据的，主要有两类数据项，无符号数和表，无符号数用来表述数字，索引引用以及字符串等，比如 u1,u2,u4,u8分别代表1个字节，2个字节，4个字节，8个字节的无符号数，而表是有多个无符号数以及其它的表组成的复合结构。可能大家看到这里 对无符号数和表到底是上面也不是很清楚，不过不要紧，等下面实例的时候，我会再以实例来解释。 明确了上面的两点以后，我们接下来后来看看Class文件中按照严格的顺序排列的字节流都具体包含些什么数据：   （上图来自The Java Virtual Machine Specification Java SE 7 Edition)" />
<meta itemprop="image" content="http://coolshell.cn//wp-content/plugins/all-in-one-seo-pack/images/default-user-image.png" />
<!-- /all in one seo pack -->
<style type="text/css" id="syntaxhighlighteranchor"></style>
</head>


<body>
<!-- wrap START -->
<div id="wrap">

<!-- container START -->
<div id="container"  >

<!-- header START -->
<div id="header">

	<!-- banner START -->
			<div class="banner">
			<a title="把这个链接拖到你的Chrome收藏夹工具栏中" href='javascript:(function(){function c(){var e=document.createElement("link");e.setAttribute("type","text/css");e.setAttribute("rel","stylesheet");e.setAttribute("href",f);e.setAttribute("class",l);document.body.appendChild(e)}function h(){var e=document.getElementsByClassName(l);for(var t=0;t<e.length;t++){document.body.removeChild(e[t])}}function p(){var e=document.createElement("div");e.setAttribute("class",a);document.body.appendChild(e);setTimeout(function(){document.body.removeChild(e)},100)}function d(e){return{height:e.offsetHeight,width:e.offsetWidth}}function v(i){var s=d(i);return s.height>e&&s.height<n&&s.width>t&&s.width<r}function m(e){var t=e;var n=0;while(!!t){n+=t.offsetTop;t=t.offsetParent}return n}function g(){var e=document.documentElement;if(!!window.innerWidth){return window.innerHeight}else if(e&&!isNaN(e.clientHeight)){return e.clientHeight}return 0}function y(){if(window.pageYOffset){return window.pageYOffset}return Math.max(document.documentElement.scrollTop,document.body.scrollTop)}function E(e){var t=m(e);return t>=w&&t<=b+w}function S(){var e=document.createElement("audio");e.setAttribute("class",l);e.src=i;e.loop=false;e.addEventListener("canplay",function(){setTimeout(function(){x(k)},500);setTimeout(function(){N();p();for(var e=0;e<O.length;e++){T(O[e])}},15500)},true);e.addEventListener("ended",function(){N();h()},true);e.innerHTML=" <p>If you are reading this, it is because your browser does not support the audio element. We recommend that you get a new browser.</p> <p>";document.body.appendChild(e);e.play()}function x(e){e.className+=" "+s+" "+o}function T(e){e.className+=" "+s+" "+u[Math.floor(Math.random()*u.length)]}function N(){var e=document.getElementsByClassName(s);var t=new RegExp("\\b"+s+"\\b");for(var n=0;n<e.length;){e[n].className=e[n].className.replace(t,"")}}var e=30;var t=30;var n=350;var r=350;var i="//s3.amazonaws.com/moovweb-marketing/playground/harlem-shake.mp3";var s="mw-harlem_shake_me";var o="im_first";var u=["im_drunk","im_baked","im_trippin","im_blown"];var a="mw-strobe_light";var f="//s3.amazonaws.com/moovweb-marketing/playground/harlem-shake-style.css";var l="mw_added_css";var b=g();var w=y();var C=document.getElementsByTagName("*");var k=null;for(var L=0;L<C.length;L++){var A=C[L];if(v(A)){if(E(A)){k=A;break}}}if(A===null){console.warn("Could not find a node of the right size. Please try a different page.");return}c();S();var O=[];for(var L=0;L<C.length;L++){var A=C[L];if(v(A)){O.push(A)}}})()    '>High一下!</a>		</div>
		<!-- banner END -->

	<div id="caption">
		<h1 id="title"><a href="http://coolshell.cn/">酷 壳 &#8211; CoolShell.cn</a></h1>
		<div id="tagline">享受编程和技术所带来的快乐 &#8211; http://coolshell.cn</div>
	</div>

	<div class="fixed"></div>
</div>
<!-- header END -->

<!-- navigation START -->
<div id="navigation">
	<!-- menus START -->
	<ul id="menus">
		<li class="page_item"><a class="home" title="首页" href="http://coolshell.cn/">首页</a></li>
		<li class="page_item page-item-4194"><a href="http://coolshell.cn/featured_posts">推荐文章</a></li>
<li class="page_item page-item-3839"><a href="http://coolshell.cn/plugins">本站插件</a></li>
<li class="page_item page-item-2"><a href="http://coolshell.cn/guestbook">留言小本</a></li>
<li class="page_item page-item-368"><a href="http://coolshell.cn/about">关于酷壳</a></li>
<li class="page_item page-item-4470"><a href="http://coolshell.cn/haoel">关于陈皓</a></li>
		<li><a class="lastmenu" href="javascript:void(0);"></a></li>
	</ul>
	<!-- menus END -->

	<!-- searchbox START -->
	<div id="searchbox">
					<form action="http://coolshell.cn" method="get">
				<div class="content">
					<input type="text" class="textfield" name="s" size="24" value="" />
					<input type="submit" class="button" value="" />
				</div>
			</form>
			</div>
<script type="text/javascript">
//<![CDATA[
	var searchbox = MGJS.$("searchbox");
	var searchtxt = MGJS.getElementsByClassName("textfield", "input", searchbox)[0];
	var searchbtn = MGJS.getElementsByClassName("button", "input", searchbox)[0];
	var tiptext = "请输入关键字...";
	if(searchtxt.value == "" || searchtxt.value == tiptext) {
		searchtxt.className += " searchtip";
		searchtxt.value = tiptext;
	}
	searchtxt.onfocus = function(e) {
		if(searchtxt.value == tiptext) {
			searchtxt.value = "";
			searchtxt.className = searchtxt.className.replace(" searchtip", "");
		}
	}
	searchtxt.onblur = function(e) {
		if(searchtxt.value == "") {
			searchtxt.className += " searchtip";
			searchtxt.value = tiptext;
		}
	}
	searchbtn.onclick = function(e) {
		if(searchtxt.value == "" || searchtxt.value == tiptext) {
			return false;
		}
	}
//]]>
</script>
	<!-- searchbox END -->

	<div class="fixed"></div>
</div>
<!-- navigation END -->

<!-- content START -->
<div id="content">

	<!-- main START -->
	<div id="main">


	<div id="postpath">
		<a title="转到首页" href="http://coolshell.cn/">首页</a>
		 &gt; <a href="http://coolshell.cn/category/proglanguage/javadev" rel="category tag">Java语言</a>		 &gt; 实例分析Java Class的文件结构	</div>

	<div class="post" id="post-9229">
		<h2>实例分析Java Class的文件结构</h2>
		<div class="info">
			<span class="date">2013年3月5日</span>
			<span class="author"><a href="http://coolshell.cn/articles/author/tiger-zhou" title="由tiger.zhou发布" rel="author">tiger.zhou</a></span>										<span class="addcomment"><a href="#respond">发表评论</a></span>
				<span class="comments"><a href="#comments">阅读评论</a></span>
						<span class="comments"> 22,095 人阅读  &nbsp;  &nbsp;</span>
			<div class="fixed"></div>
		</div>
		<div class="content">
			<p><strong>【感谢网友 @<a title="Krq_Tiger" href="http://weibo.com/xmuzyq" target="_blank">Krq_Tiger</a> 投稿】</strong></p>
<p>今天把之前在Evernote中的笔记重新整理了一下，发上来供对java class 文件结构的有兴趣的同学参考一下。</p>
<p>学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号，说“一次编写，到处运行”，其实说到无关性，Java平台还有另外一个无关 性那就是语言无关性，要实现语言无关性，那么Java体系中的class的文件结构或者说是字节码就显得相当重要了，其实Java从刚开始的时候就有两套 规范，一个是Java语言规范，另外一个是Java虚拟机规范，Java语言规范只是规定了Java语言相关的约束以及规则，而虚拟机规范则才是真正从跨 平台的角度去设计的。今天我们就以一个实际的例子来看看，到底Java中一个Class文件对应的字节码应该是什么样子。 这篇文章将首先总体上阐述一下Class到底由哪些内容构成，然后再用一个实际的Java类入手去分析class的文件结构。</p>
<p>在继续之前，我们首先需要明确如下几点：</p>
<p style="padding-left: 30px;">1）Class文件是有8个字节为基础的字节流构成的，这些字节流之间都严格按照规定的顺序排列，并且字节之间不存在任何空隙，对于超过8个字节的数据，将按 照Big-Endian的顺序存储的，也就是说高位字节存储在低的地址上面，而低位字节存储到高地址上面，其实这也是class文件要跨平台的关键，因为 PowerPC架构的处理采用Big-Endian的存储顺序，而x86系列的处理器则采用Little-Endian的存储顺序，因此为了Class文 件在各中处理器架构下保持统一的存储顺序，虚拟机规范必须对起进行统一。</p>
<p style="padding-left: 30px;">2） Class文件结构采用类似C语言的结构体来存储数据的，主要有两类数据项，无符号数和表，无符号数用来表述数字，索引引用以及字符串等，比如 u1,u2,u4,u8分别代表1个字节，2个字节，4个字节，8个字节的无符号数，而表是有多个无符号数以及其它的表组成的复合结构。可能大家看到这里 对无符号数和表到底是上面也不是很清楚，不过不要紧，等下面实例的时候，我会再以实例来解释。</p>
<p>明确了上面的两点以后，我们接下来后来看看Class文件中按照严格的顺序排列的字节流都具体包含些什么数据：</p>
<p><span id="more-9229"></span></p>
<p style="text-align: center;"><img class="aligncenter" title="点击查看原始大小图片" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/1.png" width="700" height="399" /></p>
<p style="text-align: center;">（上图来自The Java Virtual Machine Specification Java SE 7 Edition)</p>
<p>在看上图的时候，有一点我们需要注意，比如cp_info，cp_info表示常量池，上图中用 constant_pool[constant_pool_count-1]的方式来表示常量池有constant_pool_count-1个常量，它 这里是采用数组的表现形式，但是大家不要误以为所有的常量池的常量长度都是一样的，其实这个地方只是为了方便描述采用了数组的方式，但是这里并不像编程语 言那里，一个int型的数组，每个int长度都一样。明确了这一点以后，我们在回过头来看看上图中每一项都具体代表了什么含义。</p>
<p>1）u4 magic 表示魔数，并且魔数占用了4个字节，魔数到底是做什么的呢？它其实就是表示一下这个文件的类型是一个Class文件，而不是一张JPG图片，或者AVI的电影。而Class文件对应的魔数是0xCAFEBABE.</p>
<p>2）u2 minor_version 表示Class文件的次版本号，并且此版本号是u2类型的无符号数表示。</p>
<p>3） u2 major_version 表示Class文件的主版本号，并且主版本号是u2类型的无符号数表示。major_version和minor_version主要用来表示当前的虚拟 机是否接受当前这种版本的Class文件。不同版本的Java编译器编译的Class文件对应的版本是不一样的。高版本的虚拟机支持低版本的编译器编译的 Class文件结构。比如Java SE 6.0对应的虚拟机支持Java SE 5.0的编译器编译的Class文件结构，反之则不行。</p>
<p>4） u2 constant_pool_count 表示常量池的数量。这里我们需要重点来说一下常量池是什么东西，请大家不要与Jvm内存模型中的运行时常量池混淆了，Class文件中常量池主要存储了字 面量以及符号引用，其中字面量主要包括字符串，final常量的值或者某个属性的初始值等等，而符号引用主要存储类和接口的全限定名称，字段的名称以及描 述符，方法的名称以及描述符，这里名称可能大家都容易理解，至于描述符的概念，放到下面说字段表以及方法表的时候再说。另外大家都知道Jvm的内存模型中 有堆，栈，方法区，程序计数器构成，而方法区中又存在一块区域叫运行时常量池，运行时常量池中存放的东西其实也就是编译器长生的各种字面量以及符号引用， 只不过运行时常量池具有动态性，它可以在运行的时候向其中增加其它的常量进去，最具代表性的就是String的intern方法。</p>
<p>5）cp_info 表示常量池，这里面就存在了上面说的各种各样的字面量和符号引用。放到常量池的中数据项在The Java Virtual Machine Specification Java SE 7 Edition 中一共有14个常量，每一种常量都是一个表，并且每种常量都用一个公共的部分tag来表示是哪种类型的常量。</p>
<p>下面分别简单描述一下具体细节等到后面的实例 中我们再细化。</p>
<ul>
<li>CONSTANT_Utf8_info      tag标志位为1,   UTF-8编码的字符串</li>
<li>CONSTANT_Integer_info  tag标志位为3， 整形字面量</li>
<li>CONSTANT_Float_info     tag标志位为4， 浮点型字面量</li>
<li>CONSTANT_Long_info     tag标志位为5， 长整形字面量</li>
<li>CONSTANT_Double_info  tag标志位为6， 双精度字面量</li>
<li>CONSTANT_Class_info    tag标志位为7， 类或接口的符号引用</li>
<li>CONSTANT_String_info    tag标志位为8，字符串类型的字面量</li>
<li>CONSTANT_Fieldref_info  tag标志位为9,  字段的符号引用</li>
<li>CONSTANT_Methodref_info  tag标志位为10，类中方法的符号引用</li>
<li>CONSTANT_InterfaceMethodref_info tag标志位为11, 接口中方法的符号引用</li>
<li>CONSTANT_NameAndType_info tag 标志位为12，字段和方法的名称以及类型的符号引用</li>
</ul>
<p style="text-align: center;">6） u2 access_flags 表示类或者接口的访问信息，具体如下图所示：<br />
<img class="aligncenter" title="点击查看原始大小图片" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/2.png" width="700" height="421" /></p>
<p>7）u2 this_class 表示类的常量池索引，指向常量池中CONSTANT_Class_info的常量</p>
<p>8）u2 super_class 表示超类的索引，指向常量池中CONSTANT_Class_info的常量</p>
<p>9）u2 interface_counts 表示接口的数量</p>
<p>10）u2 interface[interface_counts]表示接口表，它里面每一项都指向常量池中CONSTANT_Class_info常量</p>
<p>11）u2 fields_count 表示类的实例变量和类变量的数量</p>
<p>12） field_info fields[fields_count]表示字段表的信息，其中字段表的结构如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/3.png" width="581" height="159" /></p>
<p>上图中access_flags表示字段的访问表示，比如字段是public,private，protect 等，name_index表示字段名 称，指向常量池中类型是CONSTANT_UTF8_info的常量，descriptor_index表示字段的描述符，它也指向常量池中类型为 CONSTANT_UTF8_info的常量，attributes_count表示字段表中的属性表的数量，而属性表是则是一种用与描述字段，方法以及 类的属性的可扩展的结构，不同版本的Java虚拟机所支持的属性表的数量是不同的。</p>
<p>13） u2 methods_count表示方法表的数量</p>
<p>14）method_info 表示方法表，方法表的具体结构如下图所示：</p>
<p><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/4.png" width="550" height="157" /><br />
其中access_flags表示方法的访问表示，name_index表示名称的索引，descriptor_index表示方法的描述 符，attributes_count以及attribute_info类似字段表中的属性表，只不过字段表和方法表中属性表中的属性是不同的，比如方法 表中就Code属性，表示方法的代码，而字段表中就没有Code属性。其中具体Class中到底有多少种属性，等到Class文件结构中的属性表的时候再 说说。</p>
<p>15） attribute_count表示属性表的数量，说到属性表，我们需要明确以下几点：</p>
<ul>
<li>属性表存在于Class文件结构的最后，字段表，方法表以及Code属性中，也就是说属性表中也可以存在属性表</li>
<li>属性表的长度是不固定的，不同的属性，属性表的长度是不同的</li>
</ul>
<p>上面说完了Class文件结构中每一项的构成以后，我们以一个实际的例子来解释以下上面所说的内容。</p>
<pre class="brush: java; title: ; notranslate" title="">package com.ejushang.TestClass;

public class TestClass implements Super{

private static final int staticVar = 0;

private int instanceVar=0;

public int instanceMethod(int param){
 return param+1;
 }

}

interface Super{ }</pre>
<p>通过jdk1.6.0_37的javac 编译后的TestClass.java对应的TestClass.class的二进制结构如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/5.png" width="658" height="400" /></p>
<p>下面我们就根据前面所说的Class的文件结构来解析以下上图中字节流。</p>
<p><strong>1）魔数</strong><br />
从Class的文件结构我们知道，刚开始的4个字节是魔数，上图中从地址00000000h-00000003h的内容就是魔数，从上图可知Class的文件的魔数是0xCAFEBABE。</p>
<p><strong> 2）主次版本号</strong><br />
接下来的4个字节是主次版本号，有上图可知从00000004h-00000005h对应的是0x0000,因此Class的minor_version 为0x0000,从00000006h-00000007h对应的内容为0x0032,因此Class文件的major_version版本为 0x0032,这正好就是jdk1.6.0不带target参数编译后的Class对应的主次版本。</p>
<p><strong> 3）常量池的数量</strong><br />
接下来的2个字节从00000008h-00000009h表示常量池的数量，由上图可以知道其值为0x0018，十进制为24个,但是对于常量池的数量 需要明确一点，常量池的数量是constant_pool_count-1，为什么减一，是因为索引0表示class中的数据项不引用任何常量池中的常 量。</p>
<p><strong> 4）常量池</strong><br />
我们上面说了常量池中有不同类型的常量，下面就来看看TestClass.class的第一个常量，我们知道每个常量都有一个u1类型的tag标识来表示 常量的类型，上图中0000000ah处的内容为0x0A，转换成二级制是10，有上面的关于常量类型的描述可知tag为10的常量是Constant_Methodref_info,而Constant_Methodref_info的结够如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/6.png" width="342" height="120" /></p>
<p>其中class_index指向常量池中类型为CONSTANT_Class_info的常量，从TestClass的二进制文件结构中可以看出 class_index的值为0x0004（地址为0000000bh-0000000ch)，也就是说指向第四个常量。</p>
<p>name_and_type_index指向常量池中类型为CONSTANT_NameAndType_info常量。从上图可以看出name_and_type_index的值为0x0013，表示指向常量池中的第19个常量。</p>
<p>接下来又可以通过同样的方法来找到常量池中的所有常量。不过JDK提供了一个方便的工具可以让我们查看常量池中所包含的常量。通过javap -verbose TestClass 即可得到所有常量池中的常量，截图如下：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/7.png" width="689" height="372" /></p>
<p>从上图我们可以清楚的看到，TestClass中常量池有24个常量，不要忘记了第0个常量，因为第0个常量被用来表示 Class中的数据项不引用任何常量池中的常量。从上面的分析中我们得知TestClass的第一个常量表示方法，其中class_index指向的第四 个常量为java/lang/Object，name_and_type_index指向的第19个常量值为&lt;init&gt;:()V,从这里可 以看出第一个表示方法的常量表示的是java编译器生成的实例构造器方法。通过同样的方法可以分析常量池的其它常量。OK，分析完常量池，我们接下来再分 析下access_flags。<br />
<strong>5）u2 access_flags</strong> 表示类或者接口方面的访问信息，比如Class表示的是类还是接口，是否为public,static，final等。具体访问标示的含义之前已经说过 了，下面我们就来看看TestClass的访问标示。Class的访问标示是从0000010dh-0000010e，期值为0x0021，根据前面说的 各种访问标示的标志位，我们可以知道：0x0021=0x0001|0x0020 也即ACC_PUBLIC 和 ACC_SUPER为真，其中ACC_PUBLIC大家好理解，ACC_SUPER是jdk1.2之后编译的类都会带有的标志。</p>
<p><strong>6）u2 this_class</strong> 表示类的索引值，用来表示类的全限定名称，类的索引值如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/8.png" width="671" height="396" /></p>
<p>从上图可以清楚到看到，类索引值为0x0003，对应常量池的第三个常量，通过javap的结果，我们知道第三个常量为 CONSTANT_Class_info类型的常量，通过它可以知道类的全限定名称为：com/ejushang/TestClass /TestClass</p>
<p><strong> 7）u2 super_class</strong> 表示当前类的父类的索引值，索引值所指向的常量池中类型为CONSTANT_Class_info的常量，父类的索引值如下图所示，其值为0x0004, 查看常量池的第四个常量，可知TestClass的父类的全限定名称为：java/lang/Object</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/9.png" width="670" height="395" /></p>
<p><strong>8）interfaces_count和  interfaces[interfaces_count]</strong>表示接口数量以及具体的每一个接口，TestClass的接口数量以及接口如下图所示，其中 0x0001表示接口数量为1，而0x0005表示接口在常量池的索引值，找到常量池的第五个常量，其类型为CONSTANT_Class_info，其 值为：com/ejushang/TestClass/Super</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/10.png" width="674" height="400" /></p>
<p style="text-align: center;"><strong>9）fields_count 和 field_info</strong>, fields_count表示类中field_info表的数量，而field_info表示类的实例变量和类变量，这里需要注意的是 field_info不包含从父类继承过来的字段，field_info的结构如下图所示：<br />
<img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/11.png" width="581" height="159" /></p>
<p style="text-align: center;">其中access_flags表示字段的访问标示，比如public,private,protected，static,final等，access_flags的取值如下图所示：<br />
<img class="aligncenter" title="点击查看原始大小图片" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/12.png" width="700" height="484" /></p>
<p style="text-align: left;">其中name_index 和 descriptor_index都是常量池的索引值，分别表示字段的名称和字段的描述符，字段的名称容易理解，但是字段的描述符如何理解呢？其实在JVM 规范中，对于字段的描述符规定如下图所示：<br />
<img class="aligncenter" title="点击查看原始大小图片" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/13.png" width="700" height="408" /><br />
其中大家需要关注一下上图最后一行，它表示的是对一维数组的描述符，对于String[][]的描述符将是[[ Ljava/lang/String,而对于int[][]的描述符为[[I。接下来的attributes_count以及 attribute_info分别表示属性表的数量以及属性表。下面我们还是以上面的TestClass为例，来看看TestClass的字段表吧。</p>
<p>首先我们来看一下字段的数量，TestClass的字段的数量如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/14.png" width="669" height="395" /></p>
<p>从上图中可以看出TestClass有两个字段，查看TestClass的源代码可知，确实也只有两个字段，接下来我们看看第一个字段，我们知道第一个字段应该为private int staticVar,它在Class文件中的二进制表示如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/15.png" width="669" height="402" /><br />
其中0x001A表示访问标示，通过查看access_flags表可知，其为ACC_PRIVATE,ACC_STATIC,ACC_FINAL,接下 来0x0006和0x0007分别表示常量池中第6和第7个常量，通过查看常量池可知，其值分别为：staticVar和I，其中staticVar为字 段名称，而I为字段的描述符，通过上面对描述符的解释，I所描述的是int类型的变量，接下来0x0001表示staticVar这个字段表中的属性表的 数量，从上图可以staticVar字段对应的属性表有1个，0x0008表示常量池中的第8个常量，查看常量池可以得知此属性为 ConstantValue属性，而ConstantValue属性的格式如下图所示：<br />
<img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/16.png" width="351" height="140" /></p>
<p>其中attribute_name_index表述属性名的常量池索引，本例中为ConstantValue，而ConstantValue的 attribute_length固定长度为2，而constantValue_index表示常量池中的引用，本例中，其中为0x0009，查看第9个 常量可以知道，它表示一个类型为CONSTANT_Integer_info的常量，其值为0。</p>
<p>上面说完了private static final int staticVar=0，下面我们接着说一下TestClass的private int instanceVar=0,在本例中对instanceVar的二进制表示如下图所示：</p>
<p style="text-align: left;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/17.png" width="680" height="397" /><br />
其中0x0002表示访问标示为ACC_PRIVATE,0x000A表示字段的名称，它指向常量池中的第10个常量，查看常量池可以知道字段名称为 instanceVar，而0x0007表示字段的描述符，它指向常量池中的第7个常量，查看常量池可以知道第7个常量为I，表示类型为 instanceVar的类型为I，最后0x0000表示属性表的数量为0.</p>
<p><strong> 10）methods_count 和 method_info</strong> ，其中methods_count表示方法的数量，而method_info表示的方法表，其中方法表的结构如下图所示：</p>
<p><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/18.png" width="550" height="157" /></p>
<p style="text-align: left;">从上图可以看出method_info和field_info的结构是很类似的，方法表的access_flag的所有标志位以及取值如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" title="点击查看原始大小图片" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/19.png" width="700" height="484" /></p>
<p>其中name_index和descriptor_index表示的是方法的名称和描述符，他们分别是指向常量池的索引。这里需要结解释一下方法的描述 符，方法的描述符的结构为：（参数列表）返回值，比如public int instanceMethod(int param)的描述符为：（I）I，表示带有一个int类型参数且返回值也为int类型的方法，接下来就是属性数量以及属性表了，方法表和字段表虽然都有 属性数量和属性表，但是他们里面所包含的属性是不同。接下来我们就以TestClass来看一下方法表的二进制表示。首先来看一下方法表数量，截图如下：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/20.png" width="665" height="394" /><br />
从上图可以看出方法表的数量为0x0002表示有两个方法，接下来我们来分析第一个方法，我们首先来看一下TestClass的第一个方法的access_flag，name_index,descriptor_index，截图如下：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/21.png" width="671" height="396" /><br />
从上图可以知道access_flags为0x0001，从上面对access_flags标志位的描述，可知方法的access_flags的取值为 ACC_PUBLIC,name_index为0x000B，查看常量池中的第11个常量，知道方法的名称为&lt;init&gt;，0x000C表示 descriptor_index表示常量池中的第12常量，其值为()V,表示&lt;init&gt;方法没有参数和返回值，其实这是编译器自动生成 的实例构造器方法。接下来的0x0001表示&lt;init&gt;方法的方法表有1个属性，属性截图如下：<br />
<img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/22.png" width="679" height="396" /><br />
从上图可以看出0x000D对应的常量池中的常量为Code,表示的方法的Code属性，所以到这里大家应该明白方法的那些代码是存储在Class文件方法表中的属性表中的Code属性中。接下来我们在分析一下Code属性，Code属性的结构如下图所示：<br />
<img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/23.png" width="607" height="344" /></p>
<p>其中attribute_name_index指向常量池中值为Code的常量，attribute_length的长度表示Code属性表的长度（这里 需要注意的时候长度不包括attribute_name_index和attribute_length的6个字节的长度）。</p>
<p>max_stack表示最大栈深度，虚拟机在运行时根据这个值来分配栈帧中操作数的深度，而max_locals代表了局部变量表的存储空间。</p>
<p>max_locals的单位为slot，slot是虚拟机为局部变量分配内存的最小单元，在运行时，对于不超过32位类型的数据类型，比如 byte,char,int等占用1个slot，而double和Long这种64位的数据类型则需要分配2个slot，另外max_locals的值并 不是所有局部变量所需要的内存数量之和，因为slot是可以重用的，当局部变量超过了它的作用域以后，局部变量所占用的slot就会被重用。</p>
<p>code_length代表了字节码指令的数量，而code表示的时候字节码指令，从上图可以知道code的类型为u1,一个u1类型的取值为0x00-0xFF,对应的十进制为0-255，目前虚拟机规范已经定义了200多条指令。</p>
<p>exception_table_length以及exception_table分别代表方法对应的异常信息。</p>
<p>attributes_count和attribute_info分别表示了Code属性中的属性数量和属性表，从这里可以看出Class的文件结构中，属性表是很灵活的，它可以存在于Class文件，方法表，字段表以及Code属性中。</p>
<p>接下来我们继续以上面的例子来分析一下，从上面init方法的Code属性的截图中可以看出，属性表的长度为0x00000026,max_stack的 值为0x0002,max_locals的取值为0x0001,code_length的长度为0x0000000A，那么00000149h- 00000152h为字节码，接下来exception_table_length的长度为0x0000，而attribute_count的值为 0x0001，00000157h-00000158h的值为0x000E,它表示常量池中属性的名称，查看常量池得知第14个常量的值为 LineNumberTable，LineNumberTable用于描述java源代码的行号和字节码行号的对应关系，它不是运行时必需的属性，如果通 过-g:none的编译器参数来取消生成这项信息的话，最大的影响就是异常发生的时候，堆栈中不能显示出出错的行号，调试的时候也不能按照源代码来设置断 点，接下来我们再看一下LineNumberTable的结构如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/24.png" width="566" height="184" /></p>
<p>其中attribute_name_index上面已经提到过，表示常量池的索引，attribute_length表示属性长度，而start_pc和 line_number分表表示字节码的行号和源代码的行号。本例中LineNumberTable属性的字节流如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/25.png" width="675" height="395" /></p>
<p>上面分析完了TestClass的第一个方法，通过同样的方式我们可以分析出TestClass的第二个方法，截图如下：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/26.png" width="671" height="395" /></p>
<p>其中access_flags为0x0001,name_index为0x000F,descriptor_index为0x0010，通过查看常量池可 以知道此方法为public int instanceMethod(int param)方法。通过和上面类似的方法我们可以知道instanceMethod的Code属性为下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/27.png" width="670" height="397" /></p>
<p>最后我们来分析一下，Class文件的属性，从00000191h-00000199h为Class文件中的属性表，其中0x0011表示属性的名称，查看常量池可以知道属性名称为SourceFile，我们再来看看SourceFile的结构如下图所示：</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/28.png" width="338" height="118" /></p>
<p>其中attribute_length为属性的长度，sourcefile_index指向常量池中值为源代码文件名称的常量，在本例中SourceFile属性截图如下：</p>
<p style="text-align: left;"><img class="aligncenter" alt="" src="http://coolshell.cn//wp-content/uploads/2013/03/29.png" width="681" height="395" /><br />
其中attribute_length为0x00000002表示长度为2个字节，而soucefile_index的值为0x0012,查看常量池的第18个常量可以知道源代码文件的名称为TestClass.java</p>
<p>最后，希望对技术感兴趣的朋友多交流。个人微博：（<a href="http://weibo.com/xmuzyq" target="_blank">http://weibo.com/xmuzyq</a>)</p>
<div id="xunlei_com_thunder_helper_plugin_d462f475-c18e-46be-bd10-327458d045bd">(全文完)</div>
<div style="margin-top: 15px; font-size: 11px;color: #cc0000;">
<p align=center><strong>（转载本站文章请注明作者和出处 <a href="http://coolshell.cn/">酷 壳 &#8211; CoolShell.cn</a> ，请勿用于任何商业用途）</strong></div>
<div style="text-align:center;padding:0px;font-size: 14px;margin-bottom: 50px;">——=== <b>访问 <a href=http://coolshell.cn/404/ target=_blank>酷壳404页面</a> 寻找遗失儿童。</b> ===——</div>
<div style="clear:both; margin-top:5px; margin-bottom:5px;"></div><div style="float:left"><!-- JiaThis Button BEGIN -->
<div class="jiathis_style">
<a class="jiathis_button_tsina"></a>
<a class="jiathis_button_tqq"></a>
<a class="jiathis_button_tsohu"></a>
<a class="jiathis_button_t163"></a>
<a class="jiathis_button_douban"></a>
<a class="jiathis_button_renren"></a>
<a class="jiathis_button_zhuaxia"></a>
<a class="jiathis_button_fanfou"></a>
<a class="jiathis_button_twitter"></a>
<a class="jiathis_button_fb"></a>
<a class="jiathis_button_gmail"></a>
<a class="jiathis_button_linkedin"></a>
<a class="jiathis_button_friendfeed"></a>
<a class="jiathis_button_digg"></a>
<a href="http://www.jiathis.com/share?uid=1541368" class="jiathis jiathis_txt jiathis_separator jtico jtico_jiathis" target="_blank"></a>
<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" >
var jiathis_config={
	data_track_clickback:true,
	summary:"",
	hideMore:false
}
</script>
<script type="text/javascript" src="http://v3.jiathis.com/code/jia.js?uid=1541368" charset="utf-8"></script>
<!-- JiaThis Button END --></div><div style="clear:both; margin-top:5px; margin-bottom:5px;"></div>			<div class="fixed"></div>
		</div>
		<div class="under">
			<span class="categories">分类: </span><span><a href="http://coolshell.cn/category/proglanguage/javadev" rel="category tag">Java语言</a></span>			<span class="tags">标签: </span><span><a href="http://coolshell.cn/tag/java" rel="tag">Java</a></span>		</div>
<div id="post-ratings-9229" class="post-ratings" itemscope itemtype="http://schema.org/Article" data-nonce="d33c2c7c18"><img id="rating_9229_1" src="http://coolshell.cn//wp-content/plugins/wp-postratings/images/stars_crystal/rating_on.gif" alt="好烂啊" title="好烂啊" onmouseover="current_rating(9229, 1, '好烂啊');" onmouseout="ratings_off(4.4, 5, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" /><img id="rating_9229_2" src="http://coolshell.cn//wp-content/plugins/wp-postratings/images/stars_crystal/rating_on.gif" alt="有点差" title="有点差" onmouseover="current_rating(9229, 2, '有点差');" onmouseout="ratings_off(4.4, 5, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" /><img id="rating_9229_3" src="http://coolshell.cn//wp-content/plugins/wp-postratings/images/stars_crystal/rating_on.gif" alt="凑合看看" title="凑合看看" onmouseover="current_rating(9229, 3, '凑合看看');" onmouseout="ratings_off(4.4, 5, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" /><img id="rating_9229_4" src="http://coolshell.cn//wp-content/plugins/wp-postratings/images/stars_crystal/rating_on.gif" alt="还不错" title="还不错" onmouseover="current_rating(9229, 4, '还不错');" onmouseout="ratings_off(4.4, 5, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" /><img id="rating_9229_5" src="http://coolshell.cn//wp-content/plugins/wp-postratings/images/stars_crystal/rating_half.gif" alt="很精彩" title="很精彩" onmouseover="current_rating(9229, 5, '很精彩');" onmouseout="ratings_off(4.4, 5, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" /> (<strong>26</strong> 人打了分，平均分： <strong>4.38</strong> )<br /><span class="post-ratings-text" id="ratings_9229_text"></span><meta itemprop="name" content="实例分析Java Class的文件结构" /><meta itemprop="description" content="【感谢网友 @Krq_Tiger&nbsp;投稿】

今天把之前在Evernote中的笔记重新整理了一下，发上来供对java class 文件结构的有兴趣的同学参考一下。

学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号，说&ldquo;一次编写，到处运行&rdquo;，其实说到无关性，Java平台还有另外一个无关 性那就是语言无关性，要实现语言无关性，那么Java体系中的class的文件结构或者..." /><meta itemprop="url" content="http://coolshell.cn/articles/9229.html" /><div style="display: none;" itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating"><meta itemprop="bestRating" content="5" /><meta itemprop="ratingValue" content="4.38" /><meta itemprop="ratingCount" content="26" /></div></div><div id="post-ratings-9229-loading" class="post-ratings-loading">
			<img src="http://coolshell.cn//wp-content/plugins/wp-postratings/images/loading.gif" width="16" height="16" alt="Loading..." title="Loading..." class="post-ratings-image" />Loading...</div> 
	</div>

	<!-- related posts START -->
	<div id="related_posts">
<div class="wp_rp_wrap  wp_rp_plain" id="wp_rp_first"><div class="wp_rp_content"><h3 class="related_post_title">相关文章</h3><ul class="related_post wp_rp"><li data-position="0" data-poid="in-1106" data-post-type="none" ><small class="wp_rp_publish_date">2009年07月03日</small> <a href="http://coolshell.cn/articles/1106.html" class="wp_rp_title">Java构造时成员初始化的陷阱</a></li><li data-position="1" data-poid="in-14" data-post-type="none" ><small class="wp_rp_publish_date">2009年03月02日</small> <a href="http://coolshell.cn/articles/14.html" class="wp_rp_title">Java书籍Top 10</a></li><li data-position="2" data-poid="in-611" data-post-type="none" ><small class="wp_rp_publish_date">2009年04月22日</small> <a href="http://coolshell.cn/articles/611.html" class="wp_rp_title">Java如何取源文件中文件名和行号</a></li><li data-position="3" data-poid="in-1984" data-post-type="none" ><small class="wp_rp_publish_date">2009年12月21日</small> <a href="http://coolshell.cn/articles/1984.html" class="wp_rp_title">C语言的演变史</a></li><li data-position="4" data-poid="in-889" data-post-type="none" ><small class="wp_rp_publish_date">2009年05月23日</small> <a href="http://coolshell.cn/articles/889.html" class="wp_rp_title">20非常有用的Java程序片段</a></li><li data-position="5" data-poid="in-6112" data-post-type="none" ><small class="wp_rp_publish_date">2011年12月28日</small> <a href="http://coolshell.cn/articles/6112.html" class="wp_rp_title">由一个问题到 Resin ClassLoader 的学习</a></li><li data-position="6" data-poid="in-2235" data-post-type="none" ><small class="wp_rp_publish_date">2010年03月28日</small> <a href="http://coolshell.cn/articles/2235.html" class="wp_rp_title">JAVA的字符串拼接与性能</a></li><li data-position="7" data-poid="in-1252" data-post-type="none" ><small class="wp_rp_publish_date">2009年08月13日</small> <a href="http://coolshell.cn/articles/1252.html" class="wp_rp_title">G1新型垃圾回收器一瞥</a></li></ul></div></div>
</div><div class="fixed"></div>	<!-- related posts END -->

	<script type="text/javascript" src="http://coolshell.cn//wp-content/themes/inove/js/comment.js"></script>



<div id="comments">

<div id="cmtswitcher">
			<a id="commenttab" class="curtab" href="javascript:void(0);" onclick="MGJS.switchTab('thecomments,commentnavi', 'thetrackbacks', 'commenttab', 'curtab', 'trackbacktab', 'tab');">评论 (33)</a>
		<a id="trackbacktab" class="tab" href="javascript:void(0);" onclick="MGJS.switchTab('thetrackbacks', 'thecomments,commentnavi', 'trackbacktab', 'curtab', 'commenttab', 'tab');">Trackbacks (3)</a>
				<span class="addcomment"><a href="#respond">发表评论</a></span>
				<span class="addtrackback"><a href="http://coolshell.cn/articles/9229.html/trackback">Trackback</a></span>
		<div class="fixed"></div>
</div>

<div id="commentlist">
	<!-- comments START -->
	<ol id="thecomments">
		<li class="comment regularcomment" id="comment-304370">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/a3c119f7c5a1d021320be6620b65c5e8?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-304370">
				
				chanlion
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月5日23:50					 | <a href="#comment-304370">#1</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-304370', 'comment-304370', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-304370', 'comment-304370', 'commentbody-304370', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-304370">
					<p>图片看不到呀，能不能检查下图片，谢谢，很希望能够通过作者的这篇文章来加深对Java底层的了解。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment admincomment" id="comment-304382">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/80695ffc8afc90667bb292139686239b?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-304382">
				
				tiger.zhou
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月6日00:02					 | <a href="#comment-304382">#2</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-304382', 'comment-304382', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-304382', 'comment-304382', 'commentbody-304382', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-304382">
					<p><a href="#comment-304370" rel="nofollow">@chanlion </a><br />
文章之前是发在我blog上的，今天投稿到coolshell的，可以看看，我evernote 分享的连接：@https://www.evernote.com/shard/s188/sh/e963f3f8-1bf9-402f-b56a-7d30e5220bc7/f5824384705ed0dacd0eb2b88a6dafe4</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-304390">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/5b3c5026fee43baef3b15d7fef166a7e?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-304390" class="url" href="http://www.ac.net.blog.163.com/" rel="external nofollow">
				
				Atry
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月6日00:10					 | <a href="#comment-304390">#3</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-304390', 'comment-304390', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-304390', 'comment-304390', 'commentbody-304390', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-304390">
					<p>每次看到Java的类格式就像吐槽，世界上能有比这更二的字节码格式吗？跪求甲骨文官方放弃Java字节码，改用.dex格式吧。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-304391">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/cc6b0abf49e4efad3b8b7dba0ff588a9?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-304391">
				
				FreedomKnight
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月6日00:11					 | <a href="#comment-304391">#4</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-304391', 'comment-304391', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-304391', 'comment-304391', 'commentbody-304391', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-304391">
					<p>我對這篇文章超感興趣，但圖片看不到<br />
我還以為是台灣這裡無法收看</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-304399">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/af2fbb7372dd5826e44d87e6ceccea40?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-304399" class="url" href="http://coolshell.cn" rel="external nofollow">
				
				陈皓
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月6日00:22					 | <a href="#comment-304399">#5</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-304399', 'comment-304399', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-304399', 'comment-304399', 'commentbody-304399', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-304399">
					<p><a href="#comment-304391" rel="nofollow">@FreedomKnight </a><br />
现在应该好了。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-304407">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/5b3c5026fee43baef3b15d7fef166a7e?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-304407" class="url" href="http://www.ac.net.blog.163.com/" rel="external nofollow">
				
				Atry
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月6日00:32					 | <a href="#comment-304407">#6</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-304407', 'comment-304407', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-304407', 'comment-304407', 'commentbody-304407', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-304407">
					<p>.class文件的常量池是不共享的，蛋疼的程度无与伦比。<br />
jar包虽然能压缩，但这得为每个class分开压缩，对于Scala产生的海量小class压缩率近乎于零。<br />
每次类加载都会搞出一堆随机磁盘访问，启动奇慢无比。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-304845">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/5ff9f17d025b8999b80bda70214dbf98?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-304845">
				
				路过
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月6日09:54					 | <a href="#comment-304845">#7</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-304845', 'comment-304845', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-304845', 'comment-304845', 'commentbody-304845', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-304845">
					<p>大哥你在抵制百度吗？  从搜索过来还不让进</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-304886">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/167e1082a6a3c329a3f617f180bd4520?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-304886">
				
				fish
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月6日10:56					 | <a href="#comment-304886">#8</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-304886', 'comment-304886', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-304886', 'comment-304886', 'commentbody-304886', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-304886">
					<p>哈哈，这难道就是缘分吗？最近要弄一个java class文件反编译工具，结果就看到这个文章了，话说刚刚还在看java的虚拟机规范，哈哈哈。。。。。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-305399">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/7d429c5b62eeb403a8f3f6fdd8312074?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-305399">
				
				thelONE
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月6日22:52					 | <a href="#comment-305399">#9</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-305399', 'comment-305399', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-305399', 'comment-305399', 'commentbody-305399', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-305399">
					<p>搞这些研究的目的是什么呢? 用来搞java的反向工程么</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-305409">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/e7e6b0ccaf96fea73c76a1bd6ad49894?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-305409" class="url" href="http://xmuzyq.iteye.com" rel="external nofollow">
				
				tiger.zhou
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月6日23:09					 | <a href="#comment-305409">#10</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-305409', 'comment-305409', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-305409', 'comment-305409', 'commentbody-305409', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-305409">
					<p><a href="#comment-305399" rel="nofollow">@thelONE </a><br />
class的文件结构对于理解class的类加载过程，虚拟机如何执行代码，以及目前虚拟机的动态优化都是有帮助的。从某种意义上来说对于写出更高质量的java代码也是有帮助的。哈哈</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-305923">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/9dc54ac36329abc6d8cdbf8b15e30a84?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-305923">
				
				vavio99
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月7日14:25					 | <a href="#comment-305923">#11</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-305923', 'comment-305923', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-305923', 'comment-305923', 'commentbody-305923', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-305923">
					<p>有个问题,请问博主你的javap是widowns版本的 jdk1.6.0_37\bin\javap ?<br />
我本地生成的字节码和你途中的不一样;我的常量池长度为28.<br />
D:\code\tools\develop environment\workspace\zMavenTest\target\classes&gt;&#8221;C:\Progra<br />
m Files\Java\jdk1.6.0_37\bin\javap&#8221; -verbose com.ejushang.TestClass.TestClass<br />
Compiled from &#8220;TestClass.java&#8221;<br />
public class com.ejushang.TestClass.TestClass extends java.lang.Object implement<br />
s com.ejushang.TestClass.Super<br />
  SourceFile: &#8220;TestClass.java&#8221;<br />
  minor version: 0<br />
  major version: 50<br />
  Constant pool:<br />
const #1 = class        #2;     //  com/ejushang/TestClass/TestClass</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-305974">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/e7e6b0ccaf96fea73c76a1bd6ad49894?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-305974" class="url" href="http://xmuzyq.iteye.com" rel="external nofollow">
				
				tiger.zhou
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月7日15:49					 | <a href="#comment-305974">#12</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-305974', 'comment-305974', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-305974', 'comment-305974', 'commentbody-305974', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-305974">
					<blockquote cite="#commentbody-305923"><p>
<strong><a href="#comment-305923" rel="nofollow">vavio99</a> :</strong><br />
有个问题,请问博主你的javap是widowns版本的 jdk1.6.0_37\bin\javap ?<br />
我本地生成的字节码和你途中的不一样;我的常量池长度为28.<br />
D:\code\tools\develop environment\workspace\zMavenTest\target\classes&gt;”C:\Progra<br />
m Files\Java\jdk1.6.0_37\bin\javap” -verbose com.ejushang.TestClass.TestClass<br />
Compiled from “TestClass.java”<br />
public class com.ejushang.TestClass.TestClass extends java.lang.Object implement<br />
s com.ejushang.TestClass.Super<br />
  SourceFile: “TestClass.java”<br />
  minor version: 0<br />
  major version: 50<br />
  Constant pool:<br />
const #1 = class        #2;     //  com/ejushang/TestClass/TestClass
</p></blockquote>
<p>你好，我用的Mac 版本的。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-305992">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/9dc54ac36329abc6d8cdbf8b15e30a84?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-305992">
				
				vavio99
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月7日16:17					 | <a href="#comment-305992">#13</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-305992', 'comment-305992', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-305992', 'comment-305992', 'commentbody-305992', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-305992">
					<p><a href="#comment-305974" rel="nofollow">@tiger.zhou </a><br />
可否上传下class文件,现在身边不方便用mac版本的jdk.谢谢.</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-306155">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/e7e6b0ccaf96fea73c76a1bd6ad49894?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-306155" class="url" href="http://xmuzyq.iteye.com" rel="external nofollow">
				
				tiger.zhou
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月7日19:19					 | <a href="#comment-306155">#14</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-306155', 'comment-306155', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-306155', 'comment-306155', 'commentbody-306155', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-306155">
					<blockquote cite="#commentbody-305992"><p>
<strong><a href="#comment-305992" rel="nofollow">vavio99</a> :</strong><br />
<a href="#comment-305974" rel="nofollow">@tiger.zhou </a><br />
可否上传下class文件,现在身边不方便用mac版本的jdk.谢谢.
</p></blockquote>
<p>我没有权限上传，其实class文件的结构是很有规律的，都是严格按照顺序存储的，不同的JDK版本或者不同平台的JDK版本，可能会存在常量池中的常量顺序或者数量不一样的情况。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-306168">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/a3c119f7c5a1d021320be6620b65c5e8?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-306168">
				
				chanlion
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月7日19:36					 | <a href="#comment-306168">#15</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-306168', 'comment-306168', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-306168', 'comment-306168', 'commentbody-306168', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-306168">
					<p>好的，谢谢你呀<a href="#comment-304382" rel="nofollow">@tiger.zhou </a></p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-306169">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/a4c7c7ac7da7f45794594da145591ef6?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-306169">
				
				chentao
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月7日19:36					 | <a href="#comment-306169">#16</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-306169', 'comment-306169', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-306169', 'comment-306169', 'commentbody-306169', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-306169">
					<p>谢谢啦！真伟大！</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-306249">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/b536a577fe29fde8d20b6ca6a12054dd?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-306249">
				
				xianda
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月7日23:21					 | <a href="#comment-306249">#17</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-306249', 'comment-306249', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-306249', 'comment-306249', 'commentbody-306249', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-306249">
					<p>应该是8位（bit）字节流，而不是8字节的字节流～</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-306283">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/e7e6b0ccaf96fea73c76a1bd6ad49894?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-306283" class="url" href="http://xmuzyq.iteye.com" rel="external nofollow">
				
				tiger.zhou
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月8日01:03					 | <a href="#comment-306283">#18</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-306283', 'comment-306283', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-306283', 'comment-306283', 'commentbody-306283', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-306283">
					<blockquote cite="#commentbody-306249"><p>
<strong><a href="#comment-306249" rel="nofollow">xianda</a> :</strong><br />
应该是8位（bit）字节流，而不是8字节的字节流～
</p></blockquote>
<p>对，应该是8位字节流，笔误。多谢指出。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-306576">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/bdec199b4b6d0217c0cc506b28057a99?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-306576">
				
				flyneil
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月8日13:38					 | <a href="#comment-306576">#19</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-306576', 'comment-306576', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-306576', 'comment-306576', 'commentbody-306576', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-306576">
					<p>建议作者可以连带介绍下字节码分析工具，如ASM、Javassist等，当需要用程序来分析class文件的时候，这些工具很有用。。。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-306635">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/03ec79001b70a7dc41d51c1db4db4baa?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-306635">
				
				预流
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月8日16:29					 | <a href="#comment-306635">#20</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-306635', 'comment-306635', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-306635', 'comment-306635', 'commentbody-306635', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-306635">
					<p>《深入java虚拟机》里介绍比这篇文章更详细。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-308555">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/87c78c813ad267bf78afdec489db267c?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-308555" class="url" href="https://github.com/yikebocai" rel="external nofollow">
				
				波菜
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月11日18:53					 | <a href="#comment-308555">#21</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-308555', 'comment-308555', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-308555', 'comment-308555', 'commentbody-308555', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-308555">
					<p>学习Class文件结构的最好方式就是自己写个反编译器，之前也看过但很快就忘的差不多了，这周末花时间写反编译器虽然还没完工，但这样感觉理解深入了很多，源码参见https://github.com/yikebocai/jvm</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-310697">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/6a7fb06ff9b47454a5f76f5d54e52465?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-310697" class="url" href="http://oslog.cn" rel="external nofollow">
				
				疯了的蚊子
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月15日12:46					 | <a href="#comment-310697">#22</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-310697', 'comment-310697', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-310697', 'comment-310697', 'commentbody-310697', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-310697">
					<p>写这么一篇文章要花点时间。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-310800">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/20c6ce471fd9a1e40c49a4c91d5b72cb?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-310800">
				
				NoImagination
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月15日17:44					 | <a href="#comment-310800">#23</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-310800', 'comment-310800', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-310800', 'comment-310800', 'commentbody-310800', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-310800">
					<p>scala 是不是就是利用了所谓的“语言无关性”自制了一个从 scala 到 .class 的转换器？我没用过 java。随便抛块砖。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-311655">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/f4698496cb9582d68feb1e3380bad313?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-311655">
				
				Kyrios
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月17日17:52					 | <a href="#comment-311655">#24</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-311655', 'comment-311655', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-311655', 'comment-311655', 'commentbody-311655', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-311655">
					<p>不容易啊！写这么长。。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-312761">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/a4318f615a5efcc6aff400426dc549a4?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-312761" class="url" href="http://www.godiscoder.com" rel="external nofollow">
				
				godiscoder
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月19日23:05					 | <a href="#comment-312761">#25</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-312761', 'comment-312761', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-312761', 'comment-312761', 'commentbody-312761', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-312761">
					<p><a href="#comment-310800" rel="nofollow">@NoImagination </a><br />
是的，本质上说，java只是语言的外在表现，内在还是 .class ，只不过使用javac 把 java源文件编译成为满足jvm规范的二进制文件 .class ，如果你牛逼，你可以定义语法，把一个xml文件直接编译成为一个 .class文件也可以。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-314308">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/e7e6b0ccaf96fea73c76a1bd6ad49894?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-314308" class="url" href="http://xmuzyq.iteye.com" rel="external nofollow">
				
				tiger.zhou
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月22日09:48					 | <a href="#comment-314308">#26</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-314308', 'comment-314308', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-314308', 'comment-314308', 'commentbody-314308', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-314308">
					<p><a href="#comment-310697" rel="nofollow">@疯了的蚊子 </a><br />
呵呵，文章都是在晚上和媳妇边视频边写的，也忘记写了多久了呵呵。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-317353">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/b0ca38e6a74e2ebbf1a279afb6a24ae9?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-317353">
				
				旁观者
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年3月26日17:39					 | <a href="#comment-317353">#27</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-317353', 'comment-317353', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-317353', 'comment-317353', 'commentbody-317353', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-317353">
					<p>说一句：你说你个人博客发表什么投稿？真把自己当做媒体运营了？叫嚣乎百度，难道没有一点私心。我去。</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-379202">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/8f878a00d6bc3bbd69aac1062b765b89?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<a id="commentauthor-379202" class="url" href="http://rongmayisheng.com" rel="external nofollow">
				
				weager
									</a>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年5月3日22:19					 | <a href="#comment-379202">#28</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-379202', 'comment-379202', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-379202', 'comment-379202', 'commentbody-379202', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-379202">
					<p>感觉下载一个jclasslib，然后直接调试里面的源代码，就可以比较清晰的看到字节码的结构</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-602698">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/27fe2b73c62540d1fd5926d5e7d472a4?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-602698">
				
				o2
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年7月21日23:24					 | <a href="#comment-602698">#29</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-602698', 'comment-602698', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-602698', 'comment-602698', 'commentbody-602698', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-602698">
					<p><a href="#comment-314308" rel="nofollow">@tiger.zhou </a><br />
有个明显的错误，类的全限定名称其实是以;（分号）结尾的，文章中显然把;（分号）都忽略了</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-623021">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/deae7ed471a804313b9fb2da30734556?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-623021">
				
				pangxiezhou
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年7月31日16:28					 | <a href="#comment-623021">#30</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-623021', 'comment-623021', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-623021', 'comment-623021', 'commentbody-623021', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-623021">
					<p>受益匪浅，谢谢博主的好文章</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-817504">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://0.gravatar.com/avatar/c3fc887c50e8b64d7b41bfa8c38dcf62?s=32&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-817504">
				
				kenneth
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2013年10月16日13:04					 | <a href="#comment-817504">#31</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-817504', 'comment-817504', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-817504', 'comment-817504', 'commentbody-817504', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-817504">
					<p>写的不错，支持！</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-1613456">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/1f25cab87ac9bf1e76b1e91167d855b3?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-1613456">
				
				hety
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2014年11月25日12:00					 | <a href="#comment-1613456">#32</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-1613456', 'comment-1613456', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-1613456', 'comment-1613456', 'commentbody-1613456', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-1613456">
					<p>不明觉厉</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	<li class="comment regularcomment" id="comment-1614489">
		<div class="author">
			<div class="pic">
				<img alt='' src='http://1.gravatar.com/avatar/ddb1295b4b2b0a51a6ddff7b56fb6ca8?s=32&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;r=G' class='avatar avatar-32 photo' height='32' width='32' />			</div>
			<div class="name">
									<span id="commentauthor-1614489">
				
				无名
									</span>
							</div>
		</div>

		<div class="info">
			<div class="date">
				2014年11月26日16:50					 | <a href="#comment-1614489">#33</a>
			</div>
			<div class="act">
				<a href="javascript:void(0);" onclick="MGJS_CMT.reply('commentauthor-1614489', 'comment-1614489', 'comment');">回复</a> | 
				<a href="javascript:void(0);" onclick="MGJS_CMT.quote('commentauthor-1614489', 'comment-1614489', 'commentbody-1614489', 'comment');">引用</a>
							</div>
			<div class="fixed"></div>
			<div class="content">
				
				<div id="commentbody-1614489">
					<p>上图中0000000ah处的内容为0x0A，转换成二级制是10.这里应该错了，是转成十进制的</p>
				</div>
			</div>
		</div>
		<div class="fixed"></div>

</li><!-- #comment-## -->
	</ol>
	<!-- comments END -->


	<!-- trackbacks START -->
			<ol id="thetrackbacks">
												<li class="trackback">
						<div class="date">
							2013年3月7日21:44							 | <a href="#comment-306215">#1</a>
						</div>
						<div class="act">
													</div>
						<div class="fixed"></div>
						<div class="title">
							<a href="http://www.coderli.com/java-class-compile-code">
								实例分析Java Class的文件结构 | OneCoder							</a>
						</div>
					</li>
									<li class="trackback">
						<div class="date">
							2013年4月30日09:29							 | <a href="#comment-370862">#2</a>
						</div>
						<div class="act">
													</div>
						<div class="fixed"></div>
						<div class="title">
							<a href="http://www.520lily.com/html/842.html">
								并发框架Disruptor译文 | 午后小憩							</a>
						</div>
					</li>
									<li class="trackback">
						<div class="date">
							2014年8月16日07:06							 | <a href="#comment-1513595">#3</a>
						</div>
						<div class="act">
													</div>
						<div class="fixed"></div>
						<div class="title">
							<a href="http://www.makaidong.com/blog/30567.html">
								从LongAdder看更高效的无锁实现 &#8211; 马开东博客							</a>
						</div>
					</li>
				
					</ol>
		<div class="fixed"></div>
	<!-- trackbacks END -->
</div>

</div>

	<form action="http://coolshell.cn/wp-comments-post.php" method="post" id="commentform">
	<div id="respond">

					
			<div id="author_info">
				<div class="row">
					<input type="text" name="author" id="author" class="textfield" value="" size="24" tabindex="1" />
					<label for="author" class="small">昵称 (必填)</label>
				</div>
				<div class="row">
					<input type="text" name="email" id="email" class="textfield" value="" size="24" tabindex="2" />
					<label for="email" class="small">电子邮箱 (我们会为您保密) (必填)</label>
				</div>
				<div class="row">
					<input type="text" name="url" id="url" class="textfield" value="" size="24" tabindex="3" />
					<label for="url" class="small">网址</label>
				</div>
			</div>

			
		
		<!-- comment input -->
		<div class="row">
			<textarea name="comment" id="comment" tabindex="4" rows="8" cols="50"></textarea>
		</div>

		<!-- comment submit and rss -->
		<div id="submitbox">
			<a class="feed" href="http://coolshell.cn/comments/feed">订阅评论</a>
			<div class="submitbutton">
				<input name="submit" type="submit" id="submit" class="button" tabindex="5" value="提交评论" />
			</div>
						<input type="hidden" name="comment_post_ID" value="9229" />
			<div class="fixed"></div>
		</div>

	</div>
	<p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="3b02d3a038" /></p><p style="display: none;"><input type="hidden" id="ak_js" name="ak_js" value="47"/></p>	</form>

	

	<div id="postnavi">
		<span class="prev"><a href="http://coolshell.cn/articles/9156.html" rel="next">《Rework》摘录及感想</a></span>
		<span class="next"><a href="http://coolshell.cn/articles/9169.html" rel="prev">并发框架Disruptor译文</a></span>
		<div class="fixed"></div>
	</div>


<script type='text/javascript'>
	var _gaq = _gaq || [];
	_gaq.push(['_setAccount', 'UA-7486123-1']);
_gaq.push(['_trackPageview']);

	(function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	})();
</script>
	</div>
	<!-- main END -->

	
<!-- sidebar START -->
<div id="sidebar">

<!-- sidebar north START -->
<div id="northsidebar" class="sidebar">

	<!-- feeds -->
	<div class="widget widget_feeds">
		<div class="content">
			<div id="subscribe">
				<a rel="external nofollow" id="feedrss" title="订阅这个博客的文章" href="http://coolshell.cn/feed">订阅</a>
									<ul id="feed_readers">
						<li id="google_reader"><a rel="external nofollow" class="reader" title="订阅到 Google" href="http://fusion.google.com/add?feedurl=http://coolshell.cn/feed"><span> Google</span></a></li>
						<li id="youdao_reader"><a rel="external nofollow" class="reader" title="订阅到有道" href="http://reader.youdao.com/#url=http://coolshell.cn/feed"><span>有道</span></a></li>
						<li id="xianguo_reader"><a rel="external nofollow" class="reader" title="订阅到鲜果" href="http://www.xianguo.com/subscribe.php?url=http://coolshell.cn/feed"><span>鲜果</span></a></li>
						<li id="zhuaxia_reader"><a rel="external nofollow" class="reader" title="订阅到抓虾" href="http://www.zhuaxia.com/add_channel.php?url=http://coolshell.cn/feed"><span>抓虾</span></a></li>
						<li id="yahoo_reader"><a rel="external nofollow" class="reader" title="订阅到 My Yahoo!"	href="http://add.my.yahoo.com/rss?url=http://coolshell.cn/feed"><span> My Yahoo!</span></a></li>
						<li id="newsgator_reader"><a rel="external nofollow" class="reader" title="订阅到 newsgator"	href="http://www.newsgator.com/ngs/subscriber/subfext.aspx?url=http://coolshell.cn/feed"><span> newsgator</span></a></li>
						<li id="bloglines_reader"><a rel="external nofollow" class="reader" title="订阅到 Bloglines"	href="http://www.bloglines.com/sub/http://coolshell.cn/feed"><span> Bloglines</span></a></li>
						<li id="inezha_reader"><a rel="external nofollow" class="reader" title="订阅到哪吒"	href="http://inezha.com/add?url=http://coolshell.cn/feed"><span>哪吒</span></a></li>
<li id="qq_reader"><a class="reader" title="订阅到QQ Mail" onclick="window.open(this.href);return false;" rel="external nofollow" href="http://mail.qq.com/cgi-bin/feed?u=http://coolshell.cn/feed"><span>
			QQ Mail            </span></a></li>
            <li id="douban_reader"><a class="reader" title="订阅到Douban" onclick="window.open(this.href);return false;" rel="external nofollow" href="http://9.douban.com/reader/subscribe?url=http://coolshell.cn/feed"><span>
			Douban            </span></a></li>
            <li id="rojo_reader"><a class="reader" title="订阅到Rojo" onclick="window.open(this.href);return false;" rel="external nofollow" href="http://www.rojo.com/add-subscription?resource=http://coolshell.cn/feed"><span>
            Rojo            </span></a></li>
            <li id="pageflakes_reader"><a class="reader" title="订阅到Pageflakes" onclick="window.open(this.href);return false;" rel="external nofollow" href="http://www.pageflakes.com/subscribe.aspx?url=http://coolshell.cn/feed"><span>
            Pageflakes            </span></a></li>
					</ul>
							</div>
							<a id="followme" title="Follow me!" href="http://twitter.com/haoel/">Twitter</a>
						<div class="fixed"></div>
		</div>
	</div>

	<!-- showcase -->
			<div class="widget">
							<h3>本站公告</h3>
						<div class="content">
				<p align="center" style="background-color: #777;padding: 5px;color: white;font-weight: bold;border: solid 1px black;text-shadow: 0px 0px 3px black;">访问 <a href="http://coolshell.cn/404/" target=_blank style="color: #FFE249;">酷壳404页面</a> 寻找遗失儿童！</p>

<p>酷壳建议大家多使用RSS访问阅读（本站已经是全文输出，推荐使用cloud.feedly.com 或 digg.com）。有相关事宜欢迎电邮：haoel(at)hotmail.com。最后，感谢大家对酷壳的支持和体谅！</p>

<p align=center><b>感谢 <a href=http://42qu.com/ title="42区 找到给你答案的人" target=_blank >42qu.com</a> 为本站提供 <a href="http://vps.42qu.com/" target=_blank  title="42区虚拟主机，卖给创业的你">VPS</a> </b></p>

<!--<div style="background-color: #DA2D03;color: white;text-align: center;padding: 5px;border: solid 1px black;text-shadow: 0px 0px 3px black;"><b>感谢 <a href=http://42qu.com/ title="42区 找到给你答案的人" target=_blank style="color: #E9F300;">42qu.com</a> 为本站提供 <a href="http://vps.42qu.com/" target=_blank style="color: #E9F300;" title="42区虚拟主机，卖给创业的你">VPS</a> </b></div>-->			</div>
		</div>
	
		<div id="recent-posts-2" class="widget widget_recent_entries">		<h3>最新文章</h3>		<ul>
					<li>
				<a href="http://coolshell.cn/articles/12225.html">DHH 谈混合移动应用开发</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/12206.html">HTML6 展望</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/12136.html">Google Inbox如何跨平台重用代码？</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/12103.html">vfork 挂掉的一个问题</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/12052.html">Leetcode 编程训练</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/12012.html">State Threads 回调终结者</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11973.html">bash代码注入的安全漏洞</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11928.html">互联网之子 &#8211; Aaron Swartz</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11847.html">谜题的答案和活动的心得体会</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11832.html">【活动】解迷题送礼物</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11656.html">开发团队的效率</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11609.html">TCP 的那些事儿（下）</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11564.html">TCP 的那些事儿（上）</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11629.html">「我只是认真」聊聊工匠情怀</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11541.html">面向GC的Java编程</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11466.html">C语言的整型溢出问题</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11454.html">从LongAdder看更高效的无锁实现</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11432.html">从Code Review 谈如何做技术</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11377.html">C语言结构体里的成员数组和指针</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11312.html">无插件Vim编程技巧</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11265.html">Python修饰器的函数式编程</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11235.html">一个浮点数跨平台产生的问题</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11175.html">Java中的CopyOnWrite容器</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11170.html">如何用最有创造力的方式输出42</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11112.html">由苹果的低级Bug想到的</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11094.html">可视化编程</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/11021.html">从“黑掉Github”学Web安全开发</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/10975.html">一个“蝇量级” C 语言协程库</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/10910.html">分布式系统的事务处理</a>
						</li>
					<li>
				<a href="http://coolshell.cn/articles/10822.html">函数式编程</a>
						</li>
				</ul>
		</div><div id="views-4" class="widget widget_views"><h3>全站热门</h3><ul>
<li><a href="http://coolshell.cn/articles/4990.html"  title="程序员技术练级攻略 - 501,282 人阅读">程序员技术练级攻略</a></li><li><a href="http://coolshell.cn/articles/5426.html"  title="简明 Vim 练级攻略 - 414,990 人阅读">简明 Vim 练级攻略</a></li><li><a href="http://coolshell.cn/articles/7186.html"  title="做个环保主义的程序员 - 208,533 人阅读">做个环保主义的程序员</a></li><li><a href="http://coolshell.cn/articles/4102.html"  title="如何学好C语言 - 175,121 人阅读">如何学好C语言</a></li><li><a href="http://coolshell.cn/articles/914.html"  title="6个变态的C语言Hello World程序 - 145,363 人阅读">6个变态的C语言Hello World程序</a></li><li><a href="http://coolshell.cn/articles/8883.html"  title="应该知道的Linux技巧 - 141,942 人阅读">应该知道的Linux技巧</a></li><li><a href="http://coolshell.cn/articles/2250.html"  title="&ldquo;21天教你学会C++&rdquo; - 139,515 人阅读">&ldquo;21天教你学会C++&rdquo;</a></li><li><a href="http://coolshell.cn/articles/6470.html"  title="由12306.cn谈谈网站性能技术 - 131,986 人阅读">由12306.cn谈谈网站性能技术</a></li><li><a href="http://coolshell.cn/articles/9308.html"  title="&ldquo;作环保的程序员，从不用百度开始&rdquo; - 126,644 人阅读">&ldquo;作环保的程序员，从不用百度开始&rdquo;</a></li><li><a href="http://coolshell.cn/articles/1870.html"  title="我是怎么招聘程序员的 - 121,240 人阅读">我是怎么招聘程序员的</a></li><li><a href="http://coolshell.cn/articles/10688.html"  title="编程能力与编程年龄 - 119,299 人阅读">编程能力与编程年龄</a></li><li><a href="http://coolshell.cn/articles/7829.html"  title="28个Unix/Linux的命令行神器 - 116,819 人阅读">28个Unix/Linux的命令行神器</a></li><li><a href="http://coolshell.cn/articles/9070.html"  title="AWK 简明教程 - 113,111 人阅读">AWK 简明教程</a></li><li><a href="http://coolshell.cn/articles/3549.html"  title="Android将允许纯C/C++开发应用 - 108,780 人阅读">Android将允许纯C/C++开发应用</a></li><li><a href="http://coolshell.cn/articles/6043.html"  title="Web开发中需要了解的东西 - 106,611 人阅读">Web开发中需要了解的东西</a></li><li><a href="http://coolshell.cn/articles/2287.html"  title="C++ 程序员自信心曲线图 - 99,977 人阅读">C++ 程序员自信心曲线图</a></li><li><a href="http://coolshell.cn/articles/4119.html"  title="如何学好C++语言 - 95,123 人阅读">如何学好C++语言</a></li><li><a href="http://coolshell.cn/articles/4758.html"  title="如何写出无法维护的代码 - 92,589 人阅读">如何写出无法维护的代码</a></li><li><a href="http://coolshell.cn/articles/355.html"  title="20本最好的Linux免费书籍 - 92,584 人阅读">20本最好的Linux免费书籍</a></li><li><a href="http://coolshell.cn/articles/1391.html"  title="编程真难啊 - 92,210 人阅读">编程真难啊</a></li><li><a href="http://coolshell.cn/articles/11564.html"  title="TCP 的那些事儿（上） - 91,370 人阅读">TCP 的那些事儿（上）</a></li><li><a href="http://coolshell.cn/articles/7490.html"  title="性能调优攻略 - 89,278 人阅读">性能调优攻略</a></li><li><a href="http://coolshell.cn/articles/3008.html"  title="Windows编程革命简史 - 88,215 人阅读">Windows编程革命简史</a></li><li><a href="http://coolshell.cn/articles/5761.html"  title="深入理解C语言 - 87,232 人阅读">深入理解C语言</a></li><li><a href="http://coolshell.cn/articles/5701.html"  title="SteveY对Amazon和Google平台的吐槽 - 85,975 人阅读">SteveY对Amazon和Google平台的吐槽</a></li><li><a href="http://coolshell.cn/articles/10217.html"  title="加班与效率 - 82,404 人阅读">加班与效率</a></li><li><a href="http://coolshell.cn/articles/2058.html"  title="各种流行的编程风格 - 82,198 人阅读">各种流行的编程风格</a></li><li><a href="http://coolshell.cn/articles/945.html"  title="C语言的谜题 - 82,047 人阅读">C语言的谜题</a></li><li><a href="http://coolshell.cn/articles/8790.html"  title="程序算法与人生选择 - 81,000 人阅读">程序算法与人生选择</a></li><li><a href="http://coolshell.cn/articles/4429.html"  title="面试题：火车运煤问题 - 80,680 人阅读">面试题：火车运煤问题</a></li></ul>
</div><div id="text-400151743" class="widget widget_text"><h3>新浪微博</h3>			<div class="textwidget"><iframe width="100%" height="120" class="share_self"  frameborder="0" scrolling="no" src="http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=0&isFans=0&uid=1401880315&verifier=f47cc89f&dpc=1"></iframe></div>
		</div><div id="tag_cloud-2" class="widget widget_tag_cloud"><h3>标签</h3><div class="tagcloud"><a href='http://coolshell.cn/tag/agile' class='tag-link-17' title='15个话题' style='font-size: 11.8532110092pt;'>agile</a>
<a href='http://coolshell.cn/tag/ajax' class='tag-link-34' title='11个话题' style='font-size: 10.3119266055pt;'>AJAX</a>
<a href='http://coolshell.cn/tag/algorithm' class='tag-link-76' title='25个话题' style='font-size: 14.5504587156pt;'>Algorithm</a>
<a href='http://coolshell.cn/tag/android' class='tag-link-145' title='10个话题' style='font-size: 9.79816513761pt;'>Android</a>
<a href='http://coolshell.cn/tag/bash' class='tag-link-190' title='9个话题' style='font-size: 9.28440366972pt;'>Bash</a>
<a href='http://coolshell.cn/tag/c' class='tag-link-59' title='90个话题' style='font-size: 21.6146788991pt;'>C++</a>
<a href='http://coolshell.cn/tag/coding' class='tag-link-135' title='25个话题' style='font-size: 14.5504587156pt;'>Coding</a>
<a href='http://coolshell.cn/tag/css' class='tag-link-96' title='21个话题' style='font-size: 13.6513761468pt;'>CSS</a>
<a href='http://coolshell.cn/tag/database' class='tag-link-109' title='7个话题' style='font-size: 8pt;'>Database</a>
<a href='http://coolshell.cn/tag/design' class='tag-link-71' title='18个话题' style='font-size: 12.880733945pt;'>Design</a>
<a href='http://coolshell.cn/tag/design-pattern' class='tag-link-25' title='8个话题' style='font-size: 8.64220183486pt;'>design pattern</a>
<a href='http://coolshell.cn/tag/ebook' class='tag-link-101' title='15个话题' style='font-size: 11.8532110092pt;'>ebook</a>
<a href='http://coolshell.cn/tag/flash' class='tag-link-98' title='7个话题' style='font-size: 8pt;'>Flash</a>
<a href='http://coolshell.cn/tag/game' class='tag-link-125' title='9个话题' style='font-size: 9.28440366972pt;'>Game</a>
<a href='http://coolshell.cn/tag/go' class='tag-link-238' title='9个话题' style='font-size: 9.28440366972pt;'>Go</a>
<a href='http://coolshell.cn/tag/google' class='tag-link-32' title='32个话题' style='font-size: 15.9633027523pt;'>Google</a>
<a href='http://coolshell.cn/tag/html' class='tag-link-38' title='33个话题' style='font-size: 16.0917431193pt;'>HTML</a>
<a href='http://coolshell.cn/tag/ie' class='tag-link-175' title='10个话题' style='font-size: 9.79816513761pt;'>IE</a>
<a href='http://coolshell.cn/tag/java' class='tag-link-13' title='48个话题' style='font-size: 18.1467889908pt;'>Java</a>
<a href='http://coolshell.cn/tag/javascript' class='tag-link-114' title='51个话题' style='font-size: 18.5321100917pt;'>Javascript</a>
<a href='http://coolshell.cn/tag/jquery' class='tag-link-191' title='11个话题' style='font-size: 10.3119266055pt;'>jQuery</a>
<a href='http://coolshell.cn/tag/linux' class='tag-link-37' title='60个话题' style='font-size: 19.4311926606pt;'>Linux</a>
<a href='http://coolshell.cn/tag/mysql' class='tag-link-106' title='7个话题' style='font-size: 8pt;'>MySQL</a>
<a href='http://coolshell.cn/tag/oop' class='tag-link-245' title='8个话题' style='font-size: 8.64220183486pt;'>OOP</a>
<a href='http://coolshell.cn/tag/password' class='tag-link-319' title='8个话题' style='font-size: 8.64220183486pt;'>password</a>
<a href='http://coolshell.cn/tag/performance' class='tag-link-120' title='15个话题' style='font-size: 11.8532110092pt;'>Performance</a>
<a href='http://coolshell.cn/tag/php' class='tag-link-35' title='25个话题' style='font-size: 14.5504587156pt;'>PHP</a>
<a href='http://coolshell.cn/tag/programmer' class='tag-link-70' title='94个话题' style='font-size: 21.871559633pt;'>Programmer</a>
<a href='http://coolshell.cn/tag/programming' class='tag-link-499' title='8个话题' style='font-size: 8.64220183486pt;'>Programming</a>
<a href='http://coolshell.cn/tag/programming-language' class='tag-link-115' title='12个话题' style='font-size: 10.6972477064pt;'>programming language</a>
<a href='http://coolshell.cn/tag/puzzle' class='tag-link-514' title='11个话题' style='font-size: 10.3119266055pt;'>Puzzle</a>
<a href='http://coolshell.cn/tag/pythondev' class='tag-link-33' title='29个话题' style='font-size: 15.4495412844pt;'>Python</a>
<a href='http://coolshell.cn/tag/ruby' class='tag-link-69' title='10个话题' style='font-size: 9.79816513761pt;'>Ruby</a>
<a href='http://coolshell.cn/tag/sql' class='tag-link-131' title='10个话题' style='font-size: 9.79816513761pt;'>SQL</a>
<a href='http://coolshell.cn/tag/tdd' class='tag-link-485' title='8个话题' style='font-size: 8.64220183486pt;'>TDD</a>
<a href='http://coolshell.cn/tag/ui' class='tag-link-47' title='12个话题' style='font-size: 10.6972477064pt;'>UI</a>
<a href='http://coolshell.cn/tag/unix' class='tag-link-21' title='33个话题' style='font-size: 16.0917431193pt;'>Unix</a>
<a href='http://coolshell.cn/tag/vim' class='tag-link-50' title='19个话题' style='font-size: 13.1376146789pt;'>vim</a>
<a href='http://coolshell.cn/tag/web' class='tag-link-30' title='40个话题' style='font-size: 17.119266055pt;'>Web</a>
<a href='http://coolshell.cn/tag/windows' class='tag-link-49' title='17个话题' style='font-size: 12.623853211pt;'>Windows</a>
<a href='http://coolshell.cn/tag/xml' class='tag-link-104' title='8个话题' style='font-size: 8.64220183486pt;'>XML</a>
<a href='http://coolshell.cn/tag/%e5%ae%89%e5%85%a8' class='tag-link-318' title='18个话题' style='font-size: 12.880733945pt;'>安全</a>
<a href='http://coolshell.cn/tag/%e7%a8%8b%e5%ba%8f%e5%91%98' class='tag-link-58' title='96个话题' style='font-size: 22pt;'>程序员</a>
<a href='http://coolshell.cn/tag/%e7%ae%97%e6%b3%95' class='tag-link-77' title='10个话题' style='font-size: 9.79816513761pt;'>算法</a>
<a href='http://coolshell.cn/tag/interview' class='tag-link-164' title='16个话题' style='font-size: 12.2385321101pt;'>面试</a></div>
</div></div>
<!-- sidebar north END -->

<div id="centersidebar">

	<!-- sidebar east START -->
	<div id="eastsidebar" class="sidebar">
	<div id="categories-367921423" class="widget widget_categories"><h3>分类目录</h3>		<ul>
	<li class="cat-item cat-item-189"><a href="http://coolshell.cn/category/proglanguage/dotnet" >.NET编程</a> (3)
</li>
	<li class="cat-item cat-item-8"><a href="http://coolshell.cn/category/proglanguage/ajaxdev" >Ajax开发</a> (9)
</li>
	<li class="cat-item cat-item-5"><a href="http://coolshell.cn/category/proglanguage/cplusplus" >C/C++语言</a> (70)
</li>
	<li class="cat-item cat-item-186"><a href="http://coolshell.cn/category/proglanguage/erlang" >Erlang</a> (1)
</li>
	<li class="cat-item cat-item-4"><a href="http://coolshell.cn/category/proglanguage/javadev" >Java语言</a> (32)
</li>
	<li class="cat-item cat-item-11"><a href="http://coolshell.cn/category/proglanguage/phpdev" >PHP脚本</a> (11)
</li>
	<li class="cat-item cat-item-33"><a href="http://coolshell.cn/category/proglanguage/pythondev" >Python</a> (23)
</li>
	<li class="cat-item cat-item-100"><a href="http://coolshell.cn/category/proglanguage/rubydev" >Ruby</a> (5)
</li>
	<li class="cat-item cat-item-20"><a href="http://coolshell.cn/category/operatingsystem/unixlinux" >Unix/Linux</a> (69)
</li>
	<li class="cat-item cat-item-7"><a href="http://coolshell.cn/category/proglanguage/webdev" >Web开发</a> (102)
</li>
	<li class="cat-item cat-item-19"><a href="http://coolshell.cn/category/operatingsystem/mswindows" >Windows</a> (12)
</li>
	<li class="cat-item cat-item-195"><a href="http://coolshell.cn/category/itnews" >业界新闻</a> (26)
</li>
	<li class="cat-item cat-item-509"><a href="http://coolshell.cn/category/%e4%bc%81%e4%b8%9a%e5%ba%94%e7%94%a8" >企业应用</a> (2)
</li>
	<li class="cat-item cat-item-9"><a href="http://coolshell.cn/category/technews" >技术新闻</a> (33)
</li>
	<li class="cat-item cat-item-550"><a href="http://coolshell.cn/category/%e6%8a%80%e6%9c%af%e7%ae%a1%e7%90%86" >技术管理</a> (12)
</li>
	<li class="cat-item cat-item-12"><a href="http://coolshell.cn/category/techarticle" >技术读物</a> (117)
</li>
	<li class="cat-item cat-item-18"><a href="http://coolshell.cn/category/operatingsystem" >操作系统</a> (45)
</li>
	<li class="cat-item cat-item-105"><a href="http://coolshell.cn/category/datebase" >数据库</a> (10)
</li>
	<li class="cat-item cat-item-10"><a href="http://coolshell.cn/category/misc" >杂项资源</a> (262)
</li>
	<li class="cat-item cat-item-15"><a href="http://coolshell.cn/category/process" >流程方法</a> (46)
</li>
	<li class="cat-item cat-item-23"><a href="http://coolshell.cn/category/progdesign" >程序设计</a> (81)
</li>
	<li class="cat-item cat-item-602"><a href="http://coolshell.cn/category/%e7%b3%bb%e7%bb%9f%e6%9e%b6%e6%9e%84" >系统架构</a> (8)
</li>
	<li class="cat-item cat-item-1"><a href="http://coolshell.cn/category/tools" >编程工具</a> (65)
</li>
	<li class="cat-item cat-item-3"><a href="http://coolshell.cn/category/proglanguage" >编程语言</a> (173)
</li>
	<li class="cat-item cat-item-6"><a href="http://coolshell.cn/category/netsecurity" >网络安全</a> (26)
</li>
	<li class="cat-item cat-item-39"><a href="http://coolshell.cn/category/career" >职场生涯</a> (33)
</li>
	<li class="cat-item cat-item-271"><a href="http://coolshell.cn/category/funny" >趣味问题</a> (18)
</li>
	<li class="cat-item cat-item-52"><a href="http://coolshell.cn/category/story" >轶事趣闻</a> (147)
</li>
		</ul>
</div>	</div>
	<!-- sidebar east END -->

	<!-- sidebar west START -->
	<div id="westsidebar" class="sidebar">
	<div id="archives-2" class="widget widget_archive"><h3>归档</h3>		<ul>
	<li><a href='http://coolshell.cn/articles/date/2014/12'>2014年十二月</a>&nbsp;(2)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/11'>2014年十一月</a>&nbsp;(2)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/10'>2014年十月</a>&nbsp;(2)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/09'>2014年九月</a>&nbsp;(2)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/08'>2014年八月</a>&nbsp;(2)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/06'>2014年六月</a>&nbsp;(1)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/05'>2014年五月</a>&nbsp;(4)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/04'>2014年四月</a>&nbsp;(4)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/03'>2014年三月</a>&nbsp;(5)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/02'>2014年二月</a>&nbsp;(3)</li>
	<li><a href='http://coolshell.cn/articles/date/2014/01'>2014年一月</a>&nbsp;(2)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/12'>2013年十二月</a>&nbsp;(3)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/11'>2013年十一月</a>&nbsp;(1)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/10'>2013年十月</a>&nbsp;(6)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/08'>2013年八月</a>&nbsp;(1)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/07'>2013年七月</a>&nbsp;(8)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/06'>2013年六月</a>&nbsp;(2)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/05'>2013年五月</a>&nbsp;(3)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/04'>2013年四月</a>&nbsp;(3)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/03'>2013年三月</a>&nbsp;(3)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/02'>2013年二月</a>&nbsp;(5)</li>
	<li><a href='http://coolshell.cn/articles/date/2013/01'>2013年一月</a>&nbsp;(1)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/12'>2012年十二月</a>&nbsp;(4)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/11'>2012年十一月</a>&nbsp;(4)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/10'>2012年十月</a>&nbsp;(3)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/09'>2012年九月</a>&nbsp;(4)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/08'>2012年八月</a>&nbsp;(8)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/07'>2012年七月</a>&nbsp;(4)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/06'>2012年六月</a>&nbsp;(7)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/05'>2012年五月</a>&nbsp;(6)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/04'>2012年四月</a>&nbsp;(6)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/03'>2012年三月</a>&nbsp;(6)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/02'>2012年二月</a>&nbsp;(3)</li>
	<li><a href='http://coolshell.cn/articles/date/2012/01'>2012年一月</a>&nbsp;(6)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/12'>2011年十二月</a>&nbsp;(5)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/11'>2011年十一月</a>&nbsp;(9)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/10'>2011年十月</a>&nbsp;(6)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/09'>2011年九月</a>&nbsp;(5)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/08'>2011年八月</a>&nbsp;(14)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/07'>2011年七月</a>&nbsp;(6)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/06'>2011年六月</a>&nbsp;(12)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/05'>2011年五月</a>&nbsp;(5)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/04'>2011年四月</a>&nbsp;(18)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/03'>2011年三月</a>&nbsp;(16)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/02'>2011年二月</a>&nbsp;(16)</li>
	<li><a href='http://coolshell.cn/articles/date/2011/01'>2011年一月</a>&nbsp;(18)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/12'>2010年十二月</a>&nbsp;(11)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/11'>2010年十一月</a>&nbsp;(11)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/10'>2010年十月</a>&nbsp;(19)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/09'>2010年九月</a>&nbsp;(15)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/08'>2010年八月</a>&nbsp;(10)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/07'>2010年七月</a>&nbsp;(20)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/06'>2010年六月</a>&nbsp;(9)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/05'>2010年五月</a>&nbsp;(13)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/04'>2010年四月</a>&nbsp;(12)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/03'>2010年三月</a>&nbsp;(11)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/02'>2010年二月</a>&nbsp;(7)</li>
	<li><a href='http://coolshell.cn/articles/date/2010/01'>2010年一月</a>&nbsp;(9)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/12'>2009年十二月</a>&nbsp;(22)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/11'>2009年十一月</a>&nbsp;(27)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/10'>2009年十月</a>&nbsp;(17)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/09'>2009年九月</a>&nbsp;(14)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/08'>2009年八月</a>&nbsp;(21)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/07'>2009年七月</a>&nbsp;(18)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/06'>2009年六月</a>&nbsp;(19)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/05'>2009年五月</a>&nbsp;(27)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/04'>2009年四月</a>&nbsp;(53)</li>
	<li><a href='http://coolshell.cn/articles/date/2009/03'>2009年三月</a>&nbsp;(43)</li>
	<li><a href='http://coolshell.cn/articles/date/2008/10'>2008年十月</a>&nbsp;(1)</li>
	<li><a href='http://coolshell.cn/articles/date/2007/12'>2007年十二月</a>&nbsp;(1)</li>
	<li><a href='http://coolshell.cn/articles/date/2006/11'>2006年十一月</a>&nbsp;(1)</li>
	<li><a href='http://coolshell.cn/articles/date/2004/06'>2004年六月</a>&nbsp;(1)</li>
		</ul>
</div>	</div>
	<!-- sidebar west END -->
	<div class="fixed"></div>
</div>

<!-- sidebar south START -->
<div id="southsidebar" class="sidebar">
<div id="get-recent-comments" class="widget widget_get_recent_comments"><h3>最新评论</h3><div id="get_recent_comments_wrap"><ul>	<li><a href="http://coolshell.cn/articles/12225.html#comment-1630188" title="DHH 谈混合移动应用开发, 2014年12月15日">SK Park</a>: 刚买了macbook pro,我也在纠结该学习苹果开发还是混合开发。工作四年多 做过两年多安卓 一年java web，现在做系统运用，有经验的人推荐一下，个人目标全栈工程 师。</li>
	<li><a href="http://coolshell.cn/articles/12103.html#comment-1630186" title="vfork 挂掉的一个问题, 2014年11月21日">everett</a>: 一年多以前遇到这个问题了，一直没有解决，后来慢慢就淡忘了，今 天看到您的博文，让我眼前一亮，立刻翻出一年多前留下的测试代码 ，终于可以给代码打上“已解决”了。 谢谢您</li>
	<li><a href="http://coolshell.cn/articles/3549.html#comment-1630128" title="Android将允许纯C/C++开发应用, 2011年01月24日">Adler</a>: 想不到這個貼子的生命力這麼強勁。都四年了，依然有人回覆。 做了這麼多年Android，感覺Google是不會把精力放到 C++的，能給你個NDK來優化一下已經是皇恩浩蕩啦。...</li>
	<li><a href="http://coolshell.cn/articles/12225.html#comment-1630066" title="DHH 谈混合移动应用开发, 2014年12月15日">Iven</a>: 「原声导航界面」、「一个设计师开（50%投入）发」什么的…… </li>
	<li><a href="http://coolshell.cn/articles/4429.html#comment-1630003" title="面试题：火车运煤问题, 2011年04月11日">蜻蜓</a>: 我不知道为什么大家做的这么一致，只感觉我的思路没问题。我说一 下思路和答案，大家看看有什么问题没。 逆推的方式，火车满载率最大即1000吨时能达到运送次数最少的 结果，做老板这个应该很实际。...</li>
	<li><a href="http://coolshell.cn/articles/12052.html#comment-1629862" title="Leetcode 编程训练, 2014年10月23日">frestyle</a>: 你好， permutations这个题可以写个简洁的dfs： [c] void dfs(int pos, vector &amp;amp;num, vector&amp;lt;vector&amp;...</li>
	<li><a href="http://coolshell.cn/articles/12052.html#comment-1629590" title="Leetcode 编程训练, 2014年10月23日">cloudfeng</a>: 虽然还没有把题目做完，但是个人非常同意楼主的观点：（1）想清 楚了再干，这一点深有同感，特别是做个种边界条件的题目的时候。 （2）编程确实不能着急，这个观点很多国外的经典书籍都提...</li>
	<li><a href="http://coolshell.cn/articles/12052.html#comment-1629382" title="Leetcode 编程训练, 2014年10月23日">frestyle</a>: 谢谢博主分享高质量代码，学习了！</li>
	<li><a href="http://coolshell.cn/articles/12206.html#comment-1629163" title="HTML6 展望, 2014年12月06日">paddingme</a>: 这篇文章好水。。。</li>
	<li><a href="http://coolshell.cn/articles/5686.html#comment-1628910" title="多些时间能少写些代码, 2011年10月25日">vano</a>: 很有道理,上来就写代码,出了问题然后就改,后来改得自己都不认 识了&#8230;&#8230;..</li>
	<li><a href="http://coolshell.cn/articles/4119.html#comment-1628858" title="如何学好C++语言, 2011年03月30日">修心</a>: 皓哥，“并把C++当成一种难以训服的猛兽来看待”一句中应该是 “驯服”。</li>
	<li><a href="http://coolshell.cn/articles/7425.html#comment-1628086" title="rsync 的核心算法, 2012年05月17日">怪</a>: 不错， 学习啦~</li>
	<li><a href="http://coolshell.cn/guestbook#comment-1627957" title="留言小本, 2009年03月02日">ITyang</a>: 好给力的，我的编程之路正在开始</li>
	<li><a href="http://coolshell.cn/articles/12206.html#comment-1627845" title="HTML6 展望, 2014年12月06日">火</a>: 感觉像是JSF页面</li>
	<li><a href="http://coolshell.cn/articles/12012.html#comment-1627760" title="State Threads 回调终结者, 2014年10月12日">Liigo</a>: State Threads虽然名义上叫thread，但它不是常规意义上的 thread/coroutine，因为它不能并发，所有的ST threads连同它们的调度器都是在同一个系统本地线程...</li>
</ul></div></div><div id="text-2" class="widget widget_text"><h3>友情链接</h3>			<div class="textwidget"><ul class='blogroll'>
<li><a href="http://blog.csdn.net/haoel" target="_blank" onclick="pageTracker._trackPageview('/outgoing/blog.csdn.net/haoel?referer=http://coolshell.cn');">陈皓的博客</a></li>

<li><a href="http://ifeve.com/" target="_blank" title="促进并发编程的研究和推广" onclick="pageTracker._trackPageview('/outgoing/ifeve.com/?referer=http://coolshell.cn');">并发编程</a></li>


<li><a href="http://www.raychase.net/" target="_blank" title="一个啰嗦的程序员" onclick="pageTracker._trackPageview('/outgoing/www.raychase.net/?referer=http://coolshell.cn');">四火的唠叨</a></li>



<li><a href="http://www.hellogcc.org/" target=_blank title="致力于讨论和学习GNU Toolchain方面的工作组" onclick="pageTracker._trackPageview('/outgoing/www.hellogcc.org//?referer=http://coolshell.cn/');">HelloGcc Working Group</a></li>

<li><a href="http://http://blog.lvscar.info/" target=_blank title="Just for Fun" onclick="pageTracker._trackPageview('/outgoing/http://blog.lvscar.info/?referer=http://coolshell.cn/');">吕毅的Blog</a></li>

<li><a href="http://www.cnblogs.com/weidagang2046/" target=_blank title="Just for Fun" onclick="pageTracker._trackPageview('/outgoing/http://www.cnblogs.com/weidagang2046/?referer=http://coolshell.cn/');">Todd Wei的Blog</a></li>

<li><a href="http://www.cppfans.org/" target=_blank title="记录我们点滴学习工作生活" onclick="pageTracker._trackPageview('/outgoing/http://www.cppfans.org/?referer=http://coolshell.cn/');">C++爱好者博客</a></li>

<li><a href="http://www.mhtml5.com/" target=_blank title="致力于HTML5在中国的发展与应用" onclick="pageTracker._trackPageview('/outgoing/http://www.mhtml5.com/?referer=http://coolshell.cn/');">HTML5研究小组</a></li>


<li><a href="http://zhuwenhao.com/" target=_blank title="朱文昊的中文博客－－专注技术，向往自由" onclick="pageTracker._trackPageview('/outgoing/http://zhuwenhao.com/?referer=http://coolshell.cn/');">朱文昊Albert Zhu</a></li>


<li><a href="http://www.cguage.com/" target=_blank title="某VC++软件开发爱好者" onclick="pageTracker._trackPageview('/outgoing/http://www.cguage.com/?referer=http://coolshell.cn/');">C瓜哥的博客</a></li>


<li><a href="http://www.kaiyuanba.cn/" target=_blank title="汇聚各种开源项目的中英文混合介绍并分类排列，致力于软件项目的开源事业" onclick="pageTracker._trackPageview('/outgoing/http://www.kaiyuanba.cn/?referer=http://coolshell.cn/');">开源吧</a></li>



<li><a href="http://HelloACM.com/" target=_blank title="Smart Ideas, Smart Algorithms" onclick="pageTracker._trackPageview('/outgoing/http://HelloACM.com/?referer=http://coolshell.cn/');">ACMer</a></li>

<li><a href="http://chenpeng.info/" target=_blank title="优秀的开源软件让生活更简单" onclick="pageTracker._trackPageview('/outgoing/http://chenpeng.info/?referer=http://coolshell.cn/');">陈鹏个人博客</a></li>

<li><a href="http://www.coderli.com/" target=_blank title="一个普通的coder，coding为了生活，coding因为消遣:-) Just a coder" onclick="pageTracker._trackPageview('/outgoing/http://www.coderli.com/?referer=http://coolshell.cn/');">OneCoder</a></li>

<li><a href="http://www.crazyshell.org/" target=_blank title="专注于底层基础, TCP/IP, 存储, (高性能.高可用.分布式.高并发系统) 研究" onclick="pageTracker._trackPageview('/outgoing/http://www.crazyshell.org/?referer=http://coolshell.cn/');">狂Shell – Happy Hacking</a></li>

<li><a href="http://www.tektea.com" target=_blank title="关注IT技术 | 分享 | 交流 | 记录" onclick="pageTracker._trackPageview('/outgoing/http://www.tektea.com/?referer=http://coolshell.cn/');">TekTea's Blog </a></li>

<li><a href="http://shellblog.sinaapp.com/" target=_blank title="我有一颗百度的心。" onclick="pageTracker._trackPageview('/outgoing/http://blog.tektea.comshellblog.sinaapp.com/?referer=http://coolshell.cn/');">夕水溪下 </a></li>
</ul></div>
		</div><div id="meta-3" class="widget widget_meta"><h3>功能</h3>			<ul>
			<li><a href="http://coolshell.cn/wp-login.php?action=register">注册</a></li>			<li><a href="http://coolshell.cn/wp-login.php">登录</a></li>
			<li><a href="http://coolshell.cn/feed">文章<abbr title="Really Simple Syndication">RSS</abbr></a></li>
			<li><a href="http://coolshell.cn/comments/feed">评论<abbr title="Really Simple Syndication">RSS</abbr></a></li>
<li><a href="https://cn.wordpress.org/" title="基于WordPress，一个优美、先进的个人信息发布平台。">WordPress.org</a></li>			</ul>
</div><div id="text-400151742" class="widget widget_text">			<div class="textwidget"><script src="http://s50.cnzz.com/stat.php?id=1785679&web_id=1785679&show=pic1" language="JavaScript" charset="gb2312"></script>



</div>
		</div></div>
<!-- sidebar south END -->

</div>
<!-- sidebar END -->
	<div class="fixed"></div>
</div>
<!-- content END -->

<!-- footer START -->
<div id="footer">
	<a id="gotop" href="#" onclick="MGJS.goTop();return false;">回到顶部</a>
	<a id="powered" href="http://wordpress.org/">WordPress</a>
	<div id="copyright">
		版权所有 &copy; 2004-2014 酷 壳 &#8211; CoolShell.cn	</div>
	<div id="themeinfo">
		主题由 <a href="http://www.neoease.com/">NeoEase</a> 提供, 通过 <a href="http://validator.w3.org/check?uri=referer">XHTML 1.1</a> 和 <a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3">CSS 3</a> 验证.	</div>
</div>
<!-- footer END -->

</div>
<!-- container END -->
</div>
<!-- wrap END -->

<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shCore.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushCSharp.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushPhp.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushJScript.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushJava.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushVb.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushSql.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushXml.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushDelphi.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushPython.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushRuby.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushCss.js"></script>
<script class="javascript" src="http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/shBrushCpp.js"></script>
<script class="javascript">
dp.SyntaxHighlighter.ClipboardSwf = 'http://coolshell.cn//wp-content/plugins/google-syntax-highlighter/Scripts/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');
</script>
    <!-- Start of StatCounter Code -->
    <script type="text/javascript">
    <!-- 
        var sc_project=8326668; 
        var sc_security="cccb27f2"; 
      var sc_invisible=1;
        var scJsHost = (("https:" == document.location.protocol) ?
        "https://secure." : "http://www.");
    //-->
document.write("<sc"+"ript type='text/javascript' src='" +scJsHost +"statcounter.com/counter/counter.js'></"+"script>");
</script>
<noscript><div class="statcounter"><a title="web analytics" href="http://statcounter.com/"><img class="statcounter" src="http://c.statcounter.com/8326668/0/cccb27f2/1/" alt="web analytics" /></a></div></noscript>   
    <!-- End of StatCounter Code -->
<script type='text/javascript' src='http://coolshell.cn//wp-content/plugins/akismet/_inc/form.js?ver=3.0.4'></script>
<script type='text/javascript' src='http://coolshell.cn//wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js?ver=3.0.9'></script>
<script type='text/javascript' src='http://coolshell.cn//wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJava.js?ver=3.0.9'></script>
<script type='text/javascript'>
	(function(){
		var corecss = document.createElement('link');
		var themecss = document.createElement('link');
		var corecssurl = "http://coolshell.cn//wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0.9";
		if ( corecss.setAttribute ) {
				corecss.setAttribute( "rel", "stylesheet" );
				corecss.setAttribute( "type", "text/css" );
				corecss.setAttribute( "href", corecssurl );
		} else {
				corecss.rel = "stylesheet";
				corecss.href = corecssurl;
		}
		document.getElementsByTagName("head")[0].insertBefore( corecss, document.getElementById("syntaxhighlighteranchor") );
		var themecssurl = "http://coolshell.cn//wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shThemeDefault.css?ver=3.0.9";
		if ( themecss.setAttribute ) {
				themecss.setAttribute( "rel", "stylesheet" );
				themecss.setAttribute( "type", "text/css" );
				themecss.setAttribute( "href", themecssurl );
		} else {
				themecss.rel = "stylesheet";
				themecss.href = themecssurl;
		}
		//document.getElementById("syntaxhighlighteranchor").appendChild(themecss);
		document.getElementsByTagName("head")[0].insertBefore( themecss, document.getElementById("syntaxhighlighteranchor") );
	})();
	SyntaxHighlighter.config.strings.expandSource = '+ expand source';
	SyntaxHighlighter.config.strings.help = '帮助';
	SyntaxHighlighter.config.strings.alert = 'SyntaxHighlighter\n\n';
	SyntaxHighlighter.config.strings.noBrush = '无法找到Brush：';
	SyntaxHighlighter.config.strings.brushNotHtmlScript = 'Brush不能设置 html-script选项';
	SyntaxHighlighter.defaults['class-name'] = 'coolshell_syntaxhighlighter';
	SyntaxHighlighter.defaults['pad-line-numbers'] = false;
	SyntaxHighlighter.defaults['toolbar'] = false;
	SyntaxHighlighter.all();
</script>
<script type='text/javascript'>
/* <![CDATA[ */
var ratingsL10n = {"plugin_url":"http:\/\/coolshell.cn\/wp-content\/plugins\/wp-postratings","ajax_url":"http:\/\/coolshell.cn\/wp-admin\/admin-ajax.php","text_wait":"Please rate only 1 post at a time.","image":"stars_crystal","image_ext":"gif","max":"5","show_loading":"1","show_fading":"1","custom":"0"};
var ratings_mouseover_image=new Image();ratings_mouseover_image.src=ratingsL10n.plugin_url+"/images/"+ratingsL10n.image+"/rating_over."+ratingsL10n.image_ext;;
/* ]]> */
</script>
<script type='text/javascript' src='http://coolshell.cn//wp-content/plugins/wp-postratings/postratings-js.js?ver=1.79'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var viewsCacheL10n = {"admin_ajax_url":"http:\/\/coolshell.cn\/wp-admin\/admin-ajax.php","post_id":"9229"};
/* ]]> */
</script>
<script type='text/javascript' src='http://coolshell.cn//wp-content/plugins/wp-postviews/postviews-cache.js?ver=1.68'></script>
<script src="http://s50.cnzz.com/stat.php?id=1785679&web_id=1785679&show=pic1" language="JavaScript" charset="gb2312"></script>


</body>
</html>


<script src="http://coolshell.cn//wp-content/themes/inove/js/1.9.0/jquery.min.js"></script>
<script src="http://coolshell.cn//wp-content/themes/inove/js/jquery.bpopup-0.8.0.min.js"></script>

<script type="text/javascript">
;(function($) {
    $(function() {
        var url=document.referrer;
        if ( url && url.search("http://")>-1) {
            var refurl =  url.match(/:\/\/(.[^/]+)/)[1];
            if(refurl.indexOf("baidu.com")>-1){
                $('#nobaidu_dlg').bPopup();
            }
        }
    });

})(jQuery);
</script>



<div id="nobaidu_dlg" style="background-color:#fff; border-radius:15px;color:#000;display:none;padding:20px;min-width:450px;min-height:180px;">
    <!--<span class="bClose" style="cursor:pointer; position:absolute; right:10px;top:5px;">x<span/>-->
    <img src="http://coolshell.cn//wp-content/themes/inove/img/nobaidu.jpg" align="left">
     <p style="margin-left:200px;margin-top: 20px; line-height: 30px;">
     检测到你还在使用百度这个搜索引擎，<br/>
     作为一个程序员，这是一种自暴自弃！<br/>
     <br/>
     </p>
     <p align="center" style="margin-top:20px;">
     <b><a href="http://coolshell.cn/articles/7186.html">作环保的程序员，从不用百度开始！</a></b>
     </p>
</div>


<!-- Dynamic page generated in 0.416 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2014-12-15 21:39:46 -->

<!-- Compression = gzip -->